gpt4 book ai didi

python - 尝试掌握递归函数

转载 作者:行者123 更新时间:2023-11-30 23:15:47 25 4
gpt4 key购买 nike

我试图掌握递归的概念,但我无法理解它。有人可以向我解释一下为什么它会这样工作吗?

当我看到这段代码时,我希望唯一打印的内容是 1,因为那是它最终停止调用自身的时候,这就是它在最后一次调用时返回的内容。

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


print Fib(10)

我也尝试这样做,并期望它打印 1,但只得到 None

def foo(n):
if n == 1:
return n
else:
foo(n-1)
print foo(10)

编辑:我很感谢所提供的帮助。我仍然没有看到我的大脑需要的“啊哈”连接!这更可能是由于我的经验的限制,而不是社区解释我的问题的能力。希望所提供的信息能够在我将来回过头来讨论这个问题以及其他问题时对我有所帮助。谢谢你!我会放弃投票,但没有这样做所需的声誉,抱歉!

最佳答案

代码不会打印 1,因为函数返回 1 的唯一方法是当参数 n 时是 1 或 2。所以当你说 print Fib(10) ,结果不会是 1。

相反,控件会转到if之后的下一行。语句 ( return Fib(n-1) + Fib(n-2) ),它调用 Fib再次,这次是 9 和 8。这两个函数调用的结果将相加并返回。

现在Fib使用参数 n 运行设置为 9。由于 9 不等于 1 或 2,因此 Fib 的最后一行同样如此。函数将运行,并且 Fib将再次调用值 8 和 7。

这种情况持续下去,直到 Fib被调用 n=1n=2 ,在这种情况下Fib将返回 1。它向调用者返回 1,这是 Fib 的实例。使用 n=3 调用时的函数。因此,当您调用 Fib 时会发生以下情况:与 n=3 :

3 不是 1 或 2,因此控制再次转到 Fib 的最后一行, return Fib(n-1) + Fib(n-2) 。这次,这条线路调用 Fibn-1 ,即 2,并且 n-2 ,即 1。这两个函数调用的计算结果均为 1,因此这里的函数向其调用者返回 1+1。

然后,它的调用者将加法的值返回给其调用者,调用者又将其加法的值返回给其调用者,直到调用者是 print行,仅打印结果。

关于python - 尝试掌握递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com