了解Fibonacci序列

我有一个在线发现的计算Fibonacci序列的算法。 我觉得有点像个傻瓜,但我不知道它是如何运作的!

def fib(n) if n == 0 || n == 1 return n end if n >= 2 return fib(n-1) + fib(n-2) end end 

如果我用10的参数调用方法,为什么它不返回18? 我假设在这里发生了一些递归,但我不知道。 有人能帮我理解吗?

让我们看看fib(4) ,根据你上面的代码:

 fib(4) #=> 3 

它通过使用以下结果来实现:

 fib(4) #calculates fib(3) + fib(2) fib(3) #calculates fib(2) + fib(1) fib(2) #calculates fib(1) + fib(0) fib(1) #returns 1 fib(0) #returns 0 

粗略地说,你的方法以下列方式使用上述结果( 注意:下面我使用数学符号(不是代码)和一些可疑的间距来说明哪些位被上面的结果替换):

 # fib(4) = fib(3) + fib(2) # = ( fib(2) + fib(1)) + (fib(1) + fib(0)) # = ((fib(1) + fib(0)) + 1 ) + (1 + 0 ) # = ((1 + 0 ) + 1 ) + 1 # = ( 1 + 1 ) + 1 # = 2 + 1 # = 3 

您的算法将执行上述步骤。 同样对于fib(10) ,虽然它很难手动完成,因为它可能非常麻烦。 只要你掌握了基本想法,继续前进。 顺便说一句,你不是一个傻瓜,你只是想在我们许多人想要做的事情上做得更好。 祝好运。