这就是我的想法,我不知道为什么不起作用:
def sum(n):
if n > 0:
print(n)
return sum(n) + sum(n-1)
else:
print("done doodly")
number = int(input(": "))
sum(number)
例如,如果用户输入5
,我希望程序计算5+4+3+2+1的总和,我做错了什么?
有关此问题的***非递归***版本,请参见Sum of the integers from 1 to n
7条答案
按热度按时间ldioqlga1#
两件事:
n
计算sum
时调用sum(n)
对你没有多大好处,因为你会无限递归,所以return sum(n)+sum(n-1)
行是不正确的;它需要n
加上n - 1
其他值的和,这也是有意义的,因为这就是你想要计算的。因此,您可以将代码简化为:
3pvhb19x2#
当
n==0
(在您的else
中)时,您忘记了return
twh00eeo3#
递归是计算前n个数字之和的错误方法,因为你让计算机做
n
计算(这需要O(n)时间),这是一种浪费。你甚至可以把内置的
sum()
函数和range()
一起使用,但是尽管这段代码看起来漂亮干净,它仍然是O(n):我推荐使用arithmetic series的和的等式来代替递归,因为它运行在O(1)时间内:
9gm1akwq4#
您可以将代码“复杂化”以:
其优点是现在您只使用
log(n)
堆栈,而不是n
堆栈kmbjn2e35#
我认为你可以用下面的数学函数(复杂度O(1))来代替递归(复杂度O(n))
yhuiod9q6#
使用递归
icnyk63a7#
请看看下面的片段关于您的要求。我当然希望这有帮助。干杯!