使用以下方法查找斐波那契数列中的第n个数:
def fibonacci(number)
if number < 2
number
else
fibonacci(number - 1) + fibonacci(number - 2)
end
end
puts fibonacci(6)
答案是8
(如果您从1开始计数而不是0(0,1,1,2,3,5,8…),则是序列中的第六个数字)
fibonacci(4)
的值是3
的?斐波那契数列已经内置到Ruby中了吗?不,序列不是内置的。
fibonacci
是递归函数。它将被调用9次(!)来计算fibonacci(4)
以获得3
。(顺便说一下,这是一种很糟糕的计算斐波那契数的方法。25次呼叫fibonacci(6)
!它至少应该记住以前的计算。)
那么Ruby是如何知道一个数字在给定位置的值的呢?
它还不知道。它会发现,作为这个方法的一部分。为了找出这个位置的值,它首先计算所有之前位置的所有数字的所有值。
Ruby怎么知道fibonacci(4)的值是3
因为为了计算fibonacci(4)
,首先要调用fibonacci(3)
。算法是递归的。