如何递归计算1到n的正整数之和并解决递归深度超出报错?
错误原因分析
- 递归调用参数错误:你在else分支的返回语句中第一个递归调用的参数仍然是原参数
n,没有向终止条件(n=0)收敛,程序会无限调用sumOfDigits(n),永远无法触发终止逻辑,最终触发递归深度超限错误。 - 冗余循环逻辑:递归本身已经自带迭代逻辑,不需要额外加
while n>0的循环,这里的循环没有任何实际作用。
修正后的递归实现
def sumOfDigits(n): assert n >= 0 and int(n) == n, 'The number must be positive integer only' # 终止条件:n为0时返回0 if n == 0: return 0 # 递归逻辑:1到n的和 = n + 1到n-1的和 else: return n + sumOfDigits(n-1) print(sumOfDigits(3))
运行上述代码会输出正确结果6。
额外优化建议
你当前的函数功能是计算1到n的正整数和,函数名sumOfDigits通常用来指代“求数字各位之和”的功能,建议可以重命名为sum_from_one_to_n这类更符合功能的命名,提升代码可读性。
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

