繁体   English   中英

如何递归打印数字总和到n?

[英]How to print sum of numbers to n recursively?

我写了一个函数来打印数字总和到 n。

def sumOfDigits(n):
    sum = 0
    if n < 0:
        print("Enter a positive number")
    else:
        while (n > 0):
            sum = sum + n
            n -= 1
        return sum

print(sumOfDigits(4))

这可以很好地打印结果,但现在我正在尝试递归执行。

def sumOfDigits(n):
    assert n >= 0 and int(n) == n, 'The number must be positive integer only'
    if n == 0:
        return 0
    else:
        while n > 0:
            return sumOfDigits(n) + sumOfDigits(n-1)

print(sumOfDigits(3))

但我收到以下错误:-

assert n>= 0 and int(n) == n, 'The number must be positive integer only'
   RecursionError: maximum recursion depth exceeded in comparison

任何帮助将不胜感激。 谢谢你。

在递归中,所有递归调用都必须让您更接近基本情况。 当您调用sumOfDigits(n) ,它只是重复相同的值,因此它会无限递归。

您只需要将当前值添加到递归结果中,而不是两次递归调用。 所以线

return sumOfDigits(n) + sumOfDigits(n-1)

应该只是

return n + sumOfDigits(n-1)

您也不需要while循环。 递归就是循环。

def sumOfDigits(n):
    assert n >= 0 and int(n) == n, 'The number must be positive integer only'
    if n == 0:
        return 0
    else:
        return n + sumOfDigits(n-1)

您的while循环是无限的,因为它永远不会改变n

希望这会有所帮助,但 sum 变量在全局范围内。

代码:

total = 0


def recursion(n):
    global total
    if n-1 > 0:
        total += n
        return recursion(n-1)
    else:
        total += n


recursion(4)
print(total)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM