我有一个在网上找到的计算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?我假设在这里发生了一些递归,但我不知道。有人能帮助我理解这个吗?
答案 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)
,虽然它很难手动完成,因为它可能非常麻烦。只要你掌握了基本想法,继续前进。顺便说一下,你不是一个傻瓜,你只是想在我们许多人正在努力做的事情上做得更好。祝你好运。