理解斐波纳契数列

时间:2016-07-26 03:24:33

标签: ruby 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?我假设在这里发生了一些递归,但我不知道。有人能帮助我理解这个吗?

1 个答案:

答案 0 :(得分:3)

根据您的上述代码,让我们看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),虽然它很难手动完成,因为它可能非常麻烦。只要你掌握了基本想法,继续前进。顺便说一下,你不是一个傻瓜,你只是想在我们许多人正在努力做的事情上做得更好。祝你好运。