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