Python 递归函数

1、最简单的递归函数:求阶乘

def fact(n):
    if n==1:
        return 1
    return n*(fact(n-1))

问题:fact(1000)将出现栈溢出

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\pythons\fact.py", line 4, in fact
    return n*(fact(n-1))
  File "D:\pythons\fact.py", line 4, in fact
    return n*(fact(n-1))
  File "D:\pythons\fact.py", line 4, in fact
    return n*(fact(n-1))
  [Previous line repeated 994 more times]
  File "D:\pythons\fact.py", line 2, in fact
    if n==1:
RecursionError: maximum recursion depth exceeded in comparison

优化:尾递归

def fact(n):
    return fact_iter(n,1)

def fact_iter(num,product):
    if num==1:
        return product
    return fact_iter(num-1,num*product)

猜你喜欢

转载自blog.csdn.net/qq_32662595/article/details/80269880
今日推荐