当前位置:嗨网首页>书籍在线阅读

03-尝试第一次递归

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

1.1.1 尝试第一次递归

上述计算斐波那契序列数(如图1-1所示)的公式是一种伪代码形式,可将其简单地转换为一个Python递归函数,如代码清单1-1和代码清单1-2所示。所谓递归函数是一种调用自己的函数。这次机械的转换将作为你编写函数的首次尝试,返回的是斐波那契序列中的给定数。

代码清单1-1 fib1.py

def fib1(n: int) -> int:
    return fib1(n - 1) + fib1(n - 2)

6.png

图1-1 每个火柴人的身高都是前两个火柴人身高之和

下面试着带上参数值来调用这个函数。

代码清单1-2 fib1.py(续)

if __name__ == "__main__":
    print(fib1(5))

若我们运行fib1.py,系统就会生成一条错误消息:

RecursionError: maximum recursion depth exceeded

这里有一个问题, fib1() 将一直运行下去,而不会返回最终结果。每次调用 fib1() 都会再多调用两次 fib1() ,如此反复永无止境。这种情况被称为无限递归(如图1-2所示),类似于无限循环(infinite loop)。

7.png

图1-2 递归函数fib(n)带上参数n−2和n−1调用自己