多递归函数

2024-10-01 07:41:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想指出一个引用,当一个函数使用多个递归调用时,它可以更好地解释递归。我想我了解了当函数使用一个递归实例时Python是如何处理内存的。当函数处理数据时,我可以使用print语句来跟踪数据在任何给定点的位置。然后,我可以回溯这些步骤,看看结果返回值是如何实现的。在

一旦多个递归实例在一个函数调用期间被触发,我就不再确定数据实际上是如何被处理的。先前的精心安排的印刷声明的启发性方法揭示了一个看起来量子的过程,或者至少更像伏都教。在

为了说明我的窘境,这里有两个基本的例子:斐波纳契和河内塔问题。在

def getFib(n):
    if n == 1 or n == 2:
        return 1
    return getFib(n-1) + getFib(n-2)

Fibonacci示例具有两个内联调用。同样地,{cd2>将所有的结果相加到第一行?在

^{pr2}$

Hanoi提出了一个不同的问题,函数调用在连续的行中。当函数到达第一个调用时,它是否将其解析为n=1,然后移动到已经n=1的第二个调用,然后移动到第三个调用,直到n=1?在

再说一遍,只是想找一些参考资料,能帮我弄清楚引擎盖下面到底发生了什么。我相信在这种情况下可能需要解释很多。在


Tags: 数据实例函数内存声明return步骤语句
1条回答
网友
1楼 · 发布于 2024-10-01 07:41:43

http://www.pythontutor.com/visualize.html

那里甚至有一个河内链接,这样你就可以跟踪代码的流动。在

这是一个链接到他们网站上显示的河内代码,但它可能必须经过修改才能可视化您的确切代码。在

http://www.pythontutor.com/visualize.html#code=%23+move+a+stack+of+n+disks+from+stack+a+to+stack+b,%0A%23+using+tmp+as+a+temporary+stack%0Adef+TowerOfHanoi(n,+a,+b,+tmp)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++b.append(a.pop())%0A++++else%3A%0A++++++++TowerOfHanoi(n-1,+a,+tmp,+b)%0A++++++++b.append(a.pop())%0A++++++++TowerOfHanoi(n-1,+tmp,+b,+a)%0A++++++++%0Astack1+%3D+%5B4,3,2,1%5D%0Astack2+%3D+%5B%5D%0Astack3+%3D+%5B%5D%0A++++++%0A%23+transfer+stack1+to+stack3+using+Tower+of+Hanoi+rules%0ATowerOfHanoi(len(stack1),+stack1,+stack3,+stack2)&mode=display&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&curInstr=0

相关问题 更多 >