【问题标题】:Output of function with 2 consecutive recursive statements具有 2 个连续递归语句的函数输出
【发布时间】:2019-10-04 20:54:37
【问题描述】:

我正在努力理解一个调用自身两次的递归函数的输出。我知道在实践中不太可能需要具有这种结构的函数,但是由于我是编程新手,所以我认为更深入地理解递归的概念会有所帮助。我也(我认为)在更简单的情况下理解递归的概念没有问题,即阶乘,斐波那契序列。

我已经通过 python 导师运行了这个并尝试使用调试器,但恐怕我仍然不太了解幕后发生的事情。

我也搜索过这个网站,虽然有一两个人问过类似的问题,但给出的答案对我的案例没有帮助,例如Calling recursive function twice consecutively

def recurse(n, s):
    if n == 0:
        print(s)
    else:
        recurse(n - 1, n + s)
        recurse(n - 1, n + 2*s)

recurse(2, 0)

这就是我认为发生的事情:

  • 递归(2, 0)

    • 2 != 0,所以传递给 else:
    • 递归(1,2)

      • 1 != 0,所以传递给 else:
      • 递归(0, 3)
        • 0 == 0,所以打印(3)
    • 递归(1, 2)

      • 1 != 0,所以传递给 else:
      • 递归(0, 5)
        • 0 == 0,所以打印(5)

所以我期望的输出是3, 5,但我得到的输出是3, 5, 3, 5

第二个recurse 调用然后调用第一个吗?我以为两个连续的递归语句是独立执行的,但这里似乎不是这样。

任何帮助指出我不理解的确切内容将不胜感激。

【问题讨论】:

  • recurse(1, 2) 调用recurse(0, 3) 然后 recurse(0, 5)。然后再次调用recurse(1, 2),它再次调用recurse(0, 3)recurse(0, 5)

标签: python recursion


【解决方案1】:

这就是发生的事情:

  • 递归(2, 0)
    • 2 != 0,所以传递给 else:
    • 递归(1, 2)
      • 1 != 0,所以传递给 else:
      • 递归(0, 3)
        • 0 == 0,所以打印(3)
      • recurse(0, 5) // 你错过了recurse(n - 1, n + 2*s)
        • 0 == 0,所以打印(5)
    • 递归(1, 2)
      • 1 != 0,所以传递给 else:
      • recurse(0, 3) // 你错过了recurse(n - 1, n + s)
        • 0 == 0,所以打印(3)
      • 递归(0, 5)
        • 0 == 0,所以打印(5)

【讨论】:

  • 谢谢!这真的很清楚:)(也尝试过投票但声誉太低,抱歉:()
  • 没问题!继续练习!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2016-05-08
  • 2021-08-31
  • 1970-01-01
相关资源
最近更新 更多