为何digital_root函数返回None?else分支打印sum_却得正确结果
问题原因及修复方案
问题根源
这段代码的核心问题是递归调用时未返回递归结果:
当计算得到的sum_位数大于1时,你调用了digital_root(sum_)进行递归,但没有将这个递归函数的返回值传递出去。此时当前函数执行完递归调用后,没有任何return语句,Python函数默认会返回None。而else分支里直接返回sum_,所以单独打印sum_能得到正确值,但整个函数的返回值在递归场景下丢失了。
修复后的代码
只需给递归调用加上return,就能把递归的结果传递回上层函数:
n = 942 def digital_root(n): n_str = str(n) result = [] sum_ = 0 for i in range(0, len(n_str), 1): result.append(int(n_str[i: i + 1])) for i in result: sum_ += i if len(str(sum_)) > 1: return digital_root(sum_) # 补充return传递递归结果 else: return sum_ print(digital_root(942)) # 现在会输出正确结果3
额外优化建议
利用数字根的数学性质,可以写出更简洁的实现,无需递归或循环拆数字:
def digital_root(n): return n % 9 if n % 9 != 0 or n == 0 else 9
数字根的数学规律:一个数的数字根等于它对9取余;若余数为0且原数不为0,则数字根是9;若原数是0,数字根为0。
内容的提问来源于stack exchange,提问作者onecry
相关产品推荐
相关产品推荐

