【发布时间】: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)。