Python递归阶乘代码问题:return无输出、print报错原因咨询
递归阶乘代码的两个问题解析
第一个问题:使用return实现但无输出结果
你这段代码的逻辑完全是对的,factorial(3)确实能算出结果6,但你只是调用了函数,却没把返回的结果打印出来呀!
程序显示Process finished with exit code 0,说明代码没报错、正常跑完了,但控制台不会自动输出函数的返回值——你得明确告诉程序要把结果打出来。
修正方法超简单,把调用语句改成这样就行:
print(factorial(3))
这下就能看到预期的6了。
第二个问题:改用print实现后报错TypeError
这个报错的核心问题是:递归函数的各个分支没有统一返回值。
当n == 0时,你只执行了print("1"),但函数没返回任何值,所以factorial(0)的返回值是Python默认的None。
等计算factorial(1)时,recurse = factorial(0)就会拿到None,接下来执行1 * recurse就是1 * None,这显然不符合整数乘法的规则,所以直接抛出了TypeError。
如果想用print输出每一步的结果,同时保证递归逻辑正常,得在每个分支都返回计算值:
def factorial(n): if n == 0: print(1) return 1 else: recurse = factorial(n - 1) result = n * recurse print(result) return result factorial(3)
这样运行后会依次输出1、2、6,也不会再报错啦。
内容的提问来源于stack exchange,提问作者Incl
相关产品推荐
相关产品推荐

