我正在做一个关于递归的练习题。
实现sum_integers(n)以使用递归计算从1到的所有整数的和。例如,sum_integers(3)应该返回6(1+2+3)
我解决了这个问题,却没有真正理解我到底做了什么。。。
def sum_integers(n):
if n == 0:
return 0
else:
return n + sum_integers(n-1)
pass
基本情况,我理解。
我们称之为sum_integers(3)
sum_integers(3)
sum_integers(2)
sum_integers(1)
sum_integers(0)
return 0
我不明白一旦我return 0
,它将如何返回堆栈。
在我的脑海中,这就是正在发生的事情
- 0+sum_integers(1)=0+1
- 0+1+sum_integers(2)=0+1+2
- 0+1+2+sum_integers(3)=0+1+2+3
不过我不确定。我只是想更好地理解它。
0 + 1 + 2 + sum_integers(3) = 0 + 1 + 2 + 3
并不是真正正确的,更简单的方法可能是
sum_integers(3) # go down in recursion
3 + sum_integers(2) # go down in recursion
3 + 2 + sum_integers(1) # go down in recursion
3 + 2 + 1 + sum_integers(0) # go down in recursion
3 + 2 + 1 + 0 # stop because 'return 0'
3 + 2 + 1 # go back and apply the plus
3 + 3 # go back and apply the plus
6 # go back and apply the plus