Python实现数字根递归函数时返回None的问题求解
问题诊断与修复方案
错误原因
你编写的代码核心问题出在递归调用的逻辑上:当sum1 > 9时,你仅执行了uno(sum1)递归调用,但没有将该调用的返回值向上传递给上层函数调用。Python中如果函数执行完所有逻辑没有显式写return语句,默认会返回None,因此你最外层调用uno(12345)进入else分支后,没有拿到递归返回的最终结果,最终变量result就被赋值为None。
修复代码
仅需要修改else分支的递归调用行,添加return关键字即可:
def uno(num): temp=str(num) sum1=0 for x in temp: sum1=sum1+int(x) print(sum1) if sum1<=9: return sum1 else: # 新增return,将递归计算的结果返回给上层 return uno(sum1) result=uno(12345) print(result)
修改后运行输出为:
15 6 6
和预期结果一致。
拓展补充
数字根有现成的数学计算公式,无需递归/循环遍历数位,计算效率更高:
- 若输入数字为0,数字根为0
- 若输入数字模9等于0且不为0,数字根为9
- 其余情况数字根为输入数字模9的结果
代码实现参考:
def digital_root(num): if num == 0: return 0 return 9 if num %9 ==0 else num%9
内容的提问来源于stack exchange,提问作者Zoro
相关产品推荐
相关产品推荐

