我的阶乘函数输出多行错误结果,为何无法得到正确计算值?
问题分析与修复
你的代码核心问题是函数返回值类型不统一,递归时触发了Python的字符串重复特性:
if和elif分支返回的是字符串(比如"\n Factorial of the given value is 1")else分支试图把整数和递归调用的结果(最终是字符串)相乘,Python中整数乘字符串会将字符串重复对应次数(比如3 * "abc"得到"abcabcabc")
当输入num=3时,递归过程是:
factorial(3) → 3 * factorial(2) factorial(2) → 2 * factorial(1) factorial(1) → 返回字符串 "\n Factorial of the given value is 1"
所以2 * 字符串得到2次重复,再乘以3就变成6次重复,最终print输出6行相同内容。
修复方案
让函数专注于计算阶乘数值,把结果的格式化输出放在函数外部,统一返回值类型:
def factorial(n): if n < 0: return None # 用None标记负数的非法情况 elif n in (0, 1): return 1 # 返回数值1,而非字符串 else: return n * factorial(n - 1) num = int(input("Enter any integer value:")) result = factorial(num) if result is None: print("\n Factorial does not exist for negative numbers") else: print(f"\n Factorial of the given value is {result}")
改动说明:
- 函数仅返回数值或
None:负数返回None,0/1返回数值1,其他情况返回阶乘计算结果 - 主程序单独处理输出逻辑:根据函数返回值判断是输出错误提示,还是格式化后的阶乘结果
这样输入3时,函数会正确计算3*2*1=6,最终输出Factorial of the given value is 6,完全符合预期。
内容的提问来源于stack exchange,提问作者Mohammed Hakkim
相关产品推荐
相关产品推荐

