【问题标题】:Understanding the Fibonacci sequence了解斐波那契数列
【发布时间】:2016-07-26 03:24:33
【问题描述】:

我在网上找到了一个计算斐波那契数列的算法。我觉得有点像个傻瓜,但我不知道它是如何工作的!

 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?我假设这里发生了一些递归,但我不知道。有人可以帮我理解这一点吗?

【问题讨论】:

  • 用 10 调用它会返回什么?为什么要18?第十个斐波那契数是 55。
  • 是的,它是递归。 here 是一个很好的教程,涵盖了递归斐波那契
  • 也许是因为 18 不是斐波那契数?!您发布的代码似乎正确。
  • 这是非常低效的算法,顺便说一句:)

标签: ruby fibonacci


【解决方案1】:

我们看看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) 也是如此,尽管手动完成它几乎不值得,因为它可能非常麻烦。只要你有基本的想法,继续前进。顺便说一句,你不是傻瓜,你只是想在我们许多人也在努力做的事情上做得更好。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2021-05-21
    • 2013-08-03
    • 2014-05-19
    • 2015-08-30
    相关资源
    最近更新 更多