首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“费波纳奇回归”是怎么回事?在这个项目里?

“费波纳奇回归”是怎么回事?在这个项目里?
EN

Stack Overflow用户
提问于 2012-06-25 04:41:59
回答 4查看 192关注 0票数 3

我在理解return fibonacci( number-1 ) + fibonacci( number-2 )在以下程序中的作用时遇到问题:

代码语言:javascript
复制
import sys
def fibonacci( number ):
    if( number <= 2  ):
        return 1
    else:
        return fibonacci( number-1 ) + fibonacci( number-2 )

问题是我无法想象这行代码是如何工作的:

代码语言:javascript
复制
return fibonacci( number-1 ) + fibonacci( number-2 )

同时处理"fibonacci( number-1 )“和"fibonacci( number-2 )”吗?或者"fibonacci( number-1 )“是第一个要处理的,然后是第二个?

我只看到处理这两个参数最终都会返回'1‘,所以我期望看到的最后一个结果是'1 + 1’= '2‘

如果有人能详细解释一下它的计算过程,我将不胜感激。

我认为这是一个非常新的问题,但我不能真正了解它的过程。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-25 05:01:10

你为什么不这样做呢:

代码语言:javascript
复制
>>> def fibonacci(number):
...     if number < 2:
...         return number
...     print "Number is currently %d, getting fibonacci(%d)" % (number, number - 1)
...     minus_one = fibonacci(number-1)
...     print "Number is currently %d, just got fibonacci(%d), now getting fibonacci(%d)" % (number, number - 1, number - 2)
...     minus_two = fibonacci(number-2)
...     print "Number is currently %d, returning %d + %d" % (number, minus_one, minus_two)
...     return minus_one + minus_two

所以当你调用fibonacci时,你会得到这样的结果:

代码语言:javascript
复制
>>> fibonacci(4)
Number is currently 4, getting fibonacci(3)
Number is currently 3, getting fibonacci(2)
Number is currently 2, getting fibonacci(1)
Number is currently 2, just got fibonacci(1), now getting fibonacci(0)
Number is currently 2, returning 1 + 0
Number is currently 3, just got fibonacci(2), now getting fibonacci(1)
Number is currently 3, returning 1 + 1
Number is currently 4, just got fibonacci(3), now getting fibonacci(2)
Number is currently 2, getting fibonacci(1)
Number is currently 2, just got fibonacci(1), now getting fibonacci(0)
Number is currently 2, returning 1 + 0
Number is currently 4, returning 2 + 1
3

它仍然很复杂,但至少现在您可以看到函数正在做什么来计算您的数字。

票数 5
EN

Stack Overflow用户

发布于 2012-06-25 04:44:47

是否同时处理"fibonacci( number-1 )“和"fibonacci( number-2 )”?或者"fibonacci( number-1 )“是第一个要处理的,然后是第二个?

有关系吗?

发生的情况是该函数被调用了两次。对于传递给函数的当前“实例”的number的值,一次使用number -1,一次使用-2。

假设你打电话给fibonacci(3)。这一行最终会是:

代码语言:javascript
复制
return fibonacci(2) + fibonacci(1)
票数 3
EN

Stack Overflow用户

发布于 2012-06-25 05:04:47

我非常喜欢诺伦·罗亚尔的回答,但这仍然有点难以想象。所以,在闲聊了一下之后:

..。其中时间从左到右流动,略微调整以防止一些重叠的边。不递归的叶节点是橙色的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11181047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档