递归函数是特殊的函数定义方法
在函数内部继续调用自己
#计算阶乘(5!)
factorial =1
for iin range(1, 6):
factorial *= i
print(factorial)
#输出为120,标准的循环写法
#换个思路
def factorial(n):
return n * factorial(n-1)
print(factorial(5))
[Previous line repeated 996 more times]前一行重复996次以上
RecursionError: maximum recursion depth exceeded递归错误:最大递归深度
运行无穷无尽,直达嵌套最大深度而被迫终止
----------------------------------------------------------------------------------------------------------
def factorial(n):
if n >1:
return n * factorial(n -1)
else:
return 1
print(factorial(5))
#输出120,增加了退出条件
第一次运行factorial 函数,n= 5,返回5*factorial(4)
第二次运行factorial函数,n=4,返回4*factorial(3)
第三次运行factorial函数,n=3,返回3*factorial(2)
第四次运行factorial函数,n=2,返回2*fanctorial(1)
第五次运行factorial函数,n=1,返回1
回到第四次运行的factorial函数,n=2,返回2*1
回到第三次运行的factorial函数,n=3,返回3*2*1
回到第二次运行的factorial函数,n=4,返回4*3*2*1
回到第一次运行的factorial函数,n=5,返回5*4*3*2*1
建议
递归函数提供了一种简单有效的代码逻辑实现方法
从性能上看,递归效率不高,而且递归的深度有限