Python递归实现阶乘功能输入3后运行结果不符合预期问题咨询
问题原因
- 递归分支未返回结果:当满足
num !=k的分支逻辑时,你仅调用了factorial(num-1),没有将递归调用的结果向外返回,导致除了最内层终止条件分支外,外层所有递归调用的返回值都是None,无法拿到正确计算结果。 - 全局变量使用不合理:你用全局变量
a存储计算结果,单次调用没问题,但多次调用函数时a不会自动重置为初始值1,会导致后续计算结果完全错误。 - 缺少结果输出逻辑:代码最后仅调用了
factorial函数,没有打印返回值,非交互式运行环境不会自动输出函数返回值,无法查看结果。 - 终止条件存在冗余:阶乘定义中
0! = 1、1! = 1,现有终止条件到num=0才返回,会多执行一次无意义的a = a*1运算,虽然不影响结果但逻辑不严谨。
修复方案
最小改动版本(保留原代码逻辑框架)
a=1 k=0 def factorial(num): global a if num !=k: a=a*num # 新增return传递递归结果 return factorial(num-1) else: res = a # 重置全局变量,避免多次调用出错 a = 1 return res # 新增print输出结果 print(factorial(int(input())))
规范递归实现版本(无需全局变量,逻辑更简洁)
def factorial(num): # 阶乘终止条件:0和1的阶乘都是1 if num <= 1: return 1 # 递归公式:n! = n * (n-1)! return num * factorial(num - 1) print(factorial(int(input())))
内容的提问来源于stack exchange,提问作者YI Chen Wang
相关产品推荐
相关产品推荐

