- # 递归 recursion
- ### 引题 计算 10 的阶乘
- a = 1
- for i in range(1,11):
- a *= i
- print(a)
- # 换一种思路 递归
- # 列如算 5!
- # 5! = (1*2*3*4)*5 = 4!* 5
- # 4! = (1*2*3) * 4 = 3! * 4
- # 3! = (1*2) * 3 = 2! * 3
- # 所以 5! = (((1! * 2)* 3)* 4) * 5
- # 所以 n! = (n-1)! * n n>=2
- # 结论: f(n) = f(n-1) * n n>=2
- def factorial(n):
- if n == 1:
- return 1
- return factorial(n-1) * n
- print(factorial(10))
- # 分析, 当 factorial(5) 开始调用时
- # 表达式变化为 第一次函数返回值 f(4) * 5
- # 表达式变化为 第二次 (f(3)*4)* 5
- # 表达式变化为 第三次 ((f(2)*3)*4) * 5
- # 表达式变化为 第四次 (((f(1)*2)*3)*4) * 5
- # 表达式变化为 第五次 (((1*2)*3)*4) * 5
- # 可能出现的错误: 超出最大递归深度 RecursionError: maximum recursion depth exceeded
- # 递归深度; 递归需要函数调用自身, 调用一次函数实际会调用多次函数, 每调用一次称为深度加 1, 都会增加系统内存开支, 所以 python 规定了最大深度
- # 递归的好处: 一些问题用循环难以解决, 递归思维教自然可以方便解决.
来源: http://www.bubuko.com/infodetail-2850408.html