Python阶乘递归函数返回None而非120的原因咨询
递归阶乘函数返回None的原因
先看你的代码:
def factorial(n,fact): if n!=0: fact=fact*n factorial(n-1,fact) else: print(fact) return fact print(factorial(5,1))
问题出在递归分支没有返回值:
- 当
n != 0时,你调用了factorial(n-1, fact),但没有把这个递归调用的结果return出去。Python规定,函数如果没有显式的return语句,默认返回None。 - 当递归到
n=0时,确实返回了120,但这个值只返回到上一层调用(也就是n=1的那次调用),而n=1的分支里没有把这个值继续返回,所以n=1的调用返回None,以此类推,最外层的factorial(5,1)最终返回None,导致外层print输出None。
修正方法很简单,在递归调用的那一行加上return:
def factorial(n,fact): if n!=0: fact=fact*n return factorial(n-1,fact) # 新增return,传递递归结果 else: print(fact) return fact print(factorial(5,1))
这样递归的结果会逐层传递回来,最外层调用就能拿到120,外层print也会输出120,实现你想要的两个120输出。
内容的提问来源于stack exchange,提问作者webjaya coder
相关产品推荐
相关产品推荐

