python递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用本身,这个函数就是递归函数。比如计算阶乘n! = 1 x 2 x 3 x ... x n,用函数func(n)表示,于是,func(n)用递归的方式写出来就是:
def func(n): if n == 1: return 1 return func(n-1)*n print(func(5))
具体过程:
| 次数 | n | func() | 值 |
| 1 | 5 | func(4)*5 | 120 |
| 2 | 4 | func(3)*4 | 24 |
| 3 | 3 | func(2)*3 | 6 |
| 4 | 2 | func(1)*2 | 2 |
| 5 | 1 | return 1 | 1 |
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。但是需要注意的是防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
递归例子:
1 def move(n, a, b, c): 2 if n == 1: 3 print('move', a, '-->', c) 4 else: 5 move(n-1, a, c, b) 6 move(1, a, b, c) 7 move(n-1, b, a, c) 8 9 move(4, 'A', 'B', 'C')
1 def fbi(n): 2 if n == 1: 3 return 1 4 elif n == 0: 5 return 0 6 elif n >= 2: 7 return fbi(n-1)+fbi(n-2) 8 print(fbi(8))

浙公网安备 33010602011771号