递归调用
Python中允许函数嵌套定义,也允许函数之间相互调用,而且一个函数还可以直接或间接的调用自身。
看一下求阶乘的问题:
阶乘的定义:n! = n * (n - 1) * (n - 2)… 2 * 1
n! = n * (n - 1)!
可以用递归调用的方式写求阶乘的函数,代码如下:
def fac(n):
"""求阶乘(递归写法) """
if n == 0:
return 1
return n * fac(n - 1)
递归函数的要点:
1.递归公式:(第n次与第n-1次的关系)
2.收敛条件(什么时候停止递归调用)
再举一个之前讲过的生成斐波那契数列的例子,因为斐波那契数列前两个数都是1
,从第3个数开始,每个数是前两个数相加的和,可以记为f(n) = f(n - 1) + f(n - 2)
,很显然这又是一个递归的定义,所以我们可以用下面的递归调用函数来计算第n
个斐波那契数。
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n - 1) + fib(n - 2)
if __name__ == '__main__':
# 打印前20个斐波那契数
for i in range(1, 21):
print(fib(i), end=' ')