Python递归代码报int与NoneType不支持+运算的TypeError原因是什么
报错原因分析
你提供的原始代码如下:
def tri_recursion(k): if (k > 0): result = k + tri_recursion(k - 1) print(result) else: result = 0 return result tri_recursion(6)
该报错的核心触发逻辑如下:
- Python 规则中,所有函数都存在返回值,若你没有主动编写
return语句,函数执行完所有内部逻辑后会默认返回None。 - 原始代码里
return result仅在else分支中存在,意味着只有当k <= 0时,函数才会返回整数类型的结果;只要k > 0,执行完if分支的计算、打印逻辑后,没有显式的返回语句,函数就会返回None。 - 递归调用是逐层下探再逐层返回的逻辑:调用
tri_recursion(6)时需要先获取tri_recursion(5)的返回值做加法,tri_recursion(5)需要先获取tri_recursion(4)的返回值,直到下探到tri_recursion(0)返回整数0。此时tri_recursion(1)计算得到1+0=1并打印,但tri_recursion(1)属于k>0的分支,没有显式return,最终返回None;上层tri_recursion(2)需要计算2 + tri_recursion(1),也就是整数和None做加法,两种类型不支持加法运算,就触发了对应的TypeError。 - 你把
return result调整到和else同级后,不管走if还是else分支,函数最后都会返回计算得到的整数值result,递归上层做加法时类型匹配,就能正常输出结果。
内容的提问来源于stack exchange,提问作者JackPot
相关产品推荐
相关产品推荐

