-
定义:
递归函数就是在函数内部调用自己
递归需要一个结束条件:例如 if…… return -
基本结构:
def func():
…
return func -
示例:
叠乘计算:
使用普通函数:
def func(n):
a=1
for i in range(2,n+1):
a*=i
return a
print(func(5))
输出:
120
使用递归函数:
def func(n):
if n==1:
return 1
else:
return n*func(n-1)
print(func(5))
输出:
120
注意事项:
- 不能调用太多次否则出现栈溢出问题:
def func(n):
if n==1:
return 1
else:
return n*func(n-1)
print(func(1000))
输出:
Traceback (most recent call last):
File "C:\Users\高顿\Desktop\myblog.py", line 7, in <module>
print(func(1000))
File "C:\Users\高顿\Desktop\myblog.py", line 5, in func
return n*func(n-1)
File "C:\Users\高顿\Desktop\myblog.py", line 5, in func
return n*func(n-1)
File "C:\Users\高顿\Desktop\myblog.py", line 5, in func
return n*func(n-1)
[Previous line repeated 990 more times]
File "C:\Users\高顿\Desktop\myblog.py", line 2, in func
if n==1:
RecursionError: maximum recursion depth exceeded in comparison
- 尾递归:栈溢出问题解决:
尾递归就是把当前的运算结果(或路径)放在参数里传给下层函数
def func(n,mul=0):
if n==0:
return mul
else:
return func(n-1,n+mul)
print(func(992,0))
输出:
492528
上面这个例子我试了,n超过992还是会爆栈。。。涉及到python尾递归优化的问题,先埋个坑。。
Python递归函数