这就是我所拥有的,我不确定为什么它不起作用
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的总和。我做错了什么?
答案 0 :(得分:3)
两件事:
sum(n)
计算sum
时调用n
对您没有多大帮助,因为您将无限期地递归。所以行return sum(n)+sum(n-1)
不正确;它必须是n
加上n - 1
个其他值的总和。这也是有意义的,因为这就是你想要计算的东西。因此,您可以将代码简化为:
def sum(n):
if n == 0:
return 0
return n + sum(n - 1)
答案 1 :(得分:1)
return
(在n==0
中)
else
>>> def Sum(n):
... if not n:
... return 0
... else:
... return n + Sum(n-1)
...
>>> Sum(5)
15
答案 2 :(得分:0)
您可以将代码复杂化为:
def my_sum(n, first=0):
if n == first:
return 0
else:
return n + my_sum(n-1, (n+first)//2) + my_sum((n+first)//2, first)
优点是现在只使用log(n)
堆栈而不是n
堆栈
答案 3 :(得分:0)
递归是计算前n个数之和的错误方法,因为你让计算机进行n
计算(这在O(n)时间运行。)这是一种浪费。
您甚至可以将sum()
函数与range()
一起使用,但尽管此代码看起来很干净,但仍然可以在O(n)中运行:
>>> def sum_(n):
... return sum(range(1, n+1))
...
>>> sum_(5)
15
相反递归我建议使用arithmetic series之和的等式,因为它在O(1)时间内运行:
>>> def sum_(n):
... return (n + n**2)//2
...
>>> sum_(5)
15
答案 4 :(得分:0)
我认为你可以使用下面的数学函数(复杂度O(1))而不是使用递归(复杂度O(n))
def sum(n):
return (n*(n+1))/2
答案 5 :(得分:0)
def sum_upto(n):
return n + sum_upto(n-1) if n else 0
sum_upto(100)
5050
答案 6 :(得分:0)
请查看以下关于您的请求的片段。我当然希望这会有所帮助。干杯!
def recursive_sum(n):
return n if n <= 1 else n + recursive_sum(n-1)
# Please change the number to test other scenarios.
num = 100
if num < 0:
print("Please enter a positive number")
else:
print("The sum is",recursive_sum(num))