递归函数recursion
递归函数是指:函数直接或间接调用自身
示例:
# 函数直接调用自身
def f():
f()
f()
print('递归完成')
# 函数间接调用自己
def fa():
fb()
def fb():
fa
fa()
print('递归完成')
递归说明:
1 递归一定要控制递归的层数,当符合某一条件时要终止递归调用
2 几乎所有的递归都能用while循环来代替递归的优缺点:
- 优点:
可以把问题简单化,让思路更为清晰,代码更简洁 - 缺点:
递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果
- 优点:
递归调用分为两个阶段:
1 递推阶段:
从原问题出发,按递归公式递推,从未知到已知,最终达到递归终止条件
2 回归阶段:
按递归终止条件求出结果,逆向逐步带入递归公式,回归到原问题求解
示例1:求n的阶乘
def fact(n):
"""
用递归来实现
首先 0!=1,作为判断终止条件
然后 n! = n * (n-1)! 作为递推公式
等号右边表达式即可作为返回值。
也就是 fact(n) 为n的阶乘
自然要返回 n * (n-1)! 也就是 n * fact(n-1)
"""
if n == 0:
return 1
return n * fact(n - 1)
print(fact(5))