VS Code中调用Python递归阶乘函数报TypeError如何解决
错误产生原因
核心问题是递归函数缺少返回值语句:
- Python默认规则:如果函数内部没有显式写
return返回计算结果,函数执行结束后会默认返回None(空值),也就是报错信息里提到的NoneType类型。 - 你写的递归终止分支(
n<=1的判断逻辑)里,只做了变量赋值和结果打印操作,没有把算出来的数值返回给上层调用。 - 当递归执行到
factorial(1)时,上层调用拿到的返回值就是None,回到上一层计算2 * factorial(1)时,就变成了整数(int类型)和空值做乘法,Python不支持这两种类型的乘法运算,直接抛出对应的类型错误。
修复方法
不需要改动原有的打印逻辑,只需要在两个分支算出结果后,加return语句把计算值返回给上层调用即可,修复后的可运行代码如下:
def factorial(n): if n<=1: return_value=1 print(return_value) return return_value else: return_value=n*(factorial(n-1)) print(return_value) return return_value factorial(10)
运行后会逐层打印1到10的阶乘结果,最终输出10的阶乘值3628800,不会再触发类型错误。
内容的提问来源于stack exchange,提问作者DR.MAZIAR
相关产品推荐
相关产品推荐

