python 递归函数/尾递归/递归溢栈

  1. 定义:
    递归函数就是在函数内部调用自己
    递归需要一个结束条件:例如 if…… return

  2. 基本结构:
    def func():

    return func

  3. 示例:
    叠乘计算:

使用普通函数:
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

注意事项:

  1. 不能调用太多次否则出现栈溢出问题:
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
  1. 尾递归:栈溢出问题解决:

尾递归就是把当前的运算结果(或路径)放在参数里传给下层函数

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递归函数

猜你喜欢

转载自blog.csdn.net/weixin_44595372/article/details/87971147