Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
我知道如何不用递归来解决这个问题,但有了它,我有点难以理解..我需要一行一行地深入解释它是如何工作的
问题是这样解决的:

def fibo(num)
  if num < 2
    num
  else
    #this is where I get lost on the line below..
    fibo(num-1) + fibo(num-2)
  end
end

p fibo(6)

最佳答案

在斐波那契数列中,前2个数之后的数列中的每个数都是前2个数的和:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

编写递归函数时,显式地处理基本情况(在您的情况下是fibo(0)fibo(1)),然后通过调用正在编写的函数来计算任何其他情况,并通过对以前的函数进行操作来生成以后的结果。
根据定义,在序列的前两个数字之后,fibonacci数是前两个数字的和。换句话说,fibo(n)=fibo(n-1)+fibo(n-2)。这一行代码就是这么做的:
fibo(num-1) + fibo(num-2)

它通过调用前两个数字的自身(即“递归”)并将它们相加来返回fibo(num)的值。
因为它们是基本情况,我们知道fibo(0)将是0,fibo(1)将是1。让我们看看fibo(4)是如何工作的:
fibo(4) = fibo(3) + fibo(2)
fibo(4) = (fibo(2) + fibo(1)) + (fibo(1) + fibo(0))
        = (fibo(2) +    1   ) + (   1    +    0   )
        = (fibo(2) + 2)
        = ((fibo(1) + fibo(0)) + 2
        =     1     +    0     + 2
        = 3

因此,程序最终通过将每个计算分解成更简单的问题来计算正确的结果,直到达到定义了答案的基本情况注意,这不是很有效,因为fibo被调用9次来计算fibo(4)

09-29 20:09