这是关于Fibonacci序列的程序。每次代码再次分支时,您都会从内部调用两次斐波那契函数。
def fibonacci(number)
if number < 2
number
else
fibonacci(number - 1) + fibonacci(number - 2)
end
end
puts fibonacci(6)
我唯一理解的是它增加了前一个数字的数字。这个程序取自我的任务。它说,&#34;如果你把所有这些和零加在一起,你就会得到你运行代码时得到的答案。&#34;
我真的尽力理解这段代码是如何工作的但是我失败了。任何人都可以在外行人的任期内以某种方式向我解释,或者以某种方式解释这个代码会发生什么?
答案 0 :(得分:3)
这只是Fibonacci函数的标准数学定义的直接1:1平移(简单扭曲):
Fib(0) = 0
Fib(1) = 1
Fib(n) = Fib(n-2) + Fib(n-1)
转换为Ruby,这变为:
def fib(n)
return 0 if n.zero?
return 1 if n == 1
fib(n-2) + fib(n-1)
end
很容易看出前两种情况可以合并:如果n为0,结果为0,如果n为1,则结果为1.这与说明是否相同n为0或1,结果与n相同。并且&#34; n是0或1&#34;与&#34; n小于2&#34;:
相同def fib(n)
return n if n < 2
fib(n-2) + fib(n-1)
end
这没什么特别的,它是数学Fibonacci函数的递归定义的精确翻译。
答案 1 :(得分:2)
我真的不知道哪个部分让你感到困惑,但让我试试。
在图中,函数f()表示你的斐波那契()和f(1)和f(0)预先定义为1和0。
由于f(数字)来自f(数字 - 1)+ f(数字 - 2),数字= 2,
f(2)= f(2 - 1)+ f(2 - 2)= 1 + 0 = 1。
同样,您可以得到f(3)= f(3 - 1)+ f(3 - 2)= f(2)+ f(1)= 1 + 1.您可以使用代码继续执行图表中的数字6然后你就会得到答案。
并不关心那些已经忘记他们是宝贝的人。这就像惯例:)