我想指出一个可以更好地解释函数使用多个递归调用时递归的引用。我想我知道当一个函数使用单个递归实例时,Python如何处理内存。在函数处理数据时,我可以使用打印语句来跟踪数据在任何给定点的位置。然后,我可以逐步回溯这些步骤,以了解如何实现最终的返回值。多递归函数
在一次函数调用期间,多次递归递归实例被触发时,我不再确定数据是如何被实际处理的。先前照明方式恰当的印刷品陈述揭示了一个看似量子的过程,或者至少更像伏都教。
为了说明我的困惑,这里有两个基本的例子:斐波那契和河内塔的问题。
def getFib(n):
if n == 1 or n == 2:
return 1
return getFib(n-1) + getFib(n-2)
斐波那契示例具有两个内联调用。首先是getFib(n-1)
解决了整个堆栈,然后getFib(n-2)
类似地解决,每个结果被放入新的堆栈,并且这些堆栈逐行添加在一起,这些总和为总和的结果?
def hanoi(n, s, t, b):
assert n > 0
if n ==1:
print 'move ', s, ' to ', t
else:
hanoi(n-1,s,b,t)
hanoi(1,s,t,b)
hanoi(n-1,b,t,s)
河内提出了一个不同的问题,因为函数调用是连续的行。当函数到达第一个调用时,它是否解析为n = 1,然后移到第二个已经n = 1的调用,然后是第三个调用,直到n = 1?
再一次,只是寻找参考资料,可以帮助我更好地了解引擎盖下的情况。我相信在这种情况下可能要解释一下。
我认为第一个函数将永远与递归'N = <0' –
我不明白你的问题。特别是“getFib(n-1)”首先解决了栈中的所有问题,然后同样解决了“getFib(n-2)”,每个结果都被放入新的堆栈中,并且这些堆栈按行相加那么这些总和就是为了结果?“这是什么意思?评估'getFib(n-1)',这意味着解释器执行所有的代码直到它接收到它的返回值。该代码碰巧包含对'getFib'的其他调用。 – Bakuriu