理解递归堆栈sum_integers



我正在做一个关于递归的练习题。

实现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

最新更新