【问题标题】:understanding recursion stack sum_integers理解递归堆栈 sum_integers
【发布时间】:2021-03-23 04:00:07
【问题描述】:

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

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

虽然我不确定。我只是想更好地理解它。

【问题讨论】:

  • 你最后的想法是对的,那你还有什么不明白的?
  • @azro 我想我想确保我的思维过程是正确的。还是有点模糊
  • 要了解递归,首先要了解递归。

标签: python recursion data-structures stack


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2017-11-27
    • 2014-12-13
    • 2011-11-24
    • 2015-06-06
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多