2016-08-22 78 views
-1

这是一个关于斐波那契数列的程序。每次代码再次分支时,您都会从内部调用斐波那契函数两次。斐波那契 - 递归 - 红宝石

def fibonacci(number) 
    if number < 2 
    number 
    else 
    fibonacci(number - 1) + fibonacci(number - 2) 
    end 
end 

puts fibonacci(6) 

我明白的唯一的事情就是它增加了前一个数字的数字。这个程序是从我的任务中拿走的。它说:“如果你把所有这些和零加入到一起,你会得到与你运行代码时相同的答案。”

enter image description here

我真的尽我所能,以了解该代码的作品,但我失败了。任何人都可以在那里很友善,并且以外行人的名义或以某种方式向我解释,这将会理解此代码上发生了什么?

+3

这里带有讽刺意味的是,你的图像比我在这个主题上讨论过的大多数答案在解释斐波那契数列上做得更好。 – Makoto

+0

你有多粗鲁。 –

+2

@ Makoto的评论对我来说并不粗鲁。我不认为他说你或你的代码有什么不好。他在说你包含的图像非常好。 –

回答

3

这仅仅是直接的1:

Fib(0) = 0 
Fib(1) = 1 
Fib(n) = Fib(n-2) + Fib(n-1) 

翻译成拼音,这将成为:1个斐波那契数函数的标准数学定义的转换(用一个简单的扭曲):

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相同。而“n为0或1”是一样的“n小于2”:

def fib(n) 
    return n if n < 2 
    fib(n-2) + fib(n-1) 
end 

没有什么特别之处,它的数学斐波那契函数的递归定义的准确翻译。

2

我真的不知道哪个部分让你感到困惑,但让我试试。在图中,函数f()表示你的斐波那契函数f(1)和f(0)被预先定义为1和0.
由于f(数)来自f(数 - 1)+ f(number - 2)in your number = 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中的数字,然后得到答案。

并不在乎那些已经忘记他们是宝贝的人。这就像约定在这里:)

+0

谢谢你将我理解为初学者。有些人只是粗鲁的,忘记他们曾经是初学者试图探索计划。祝一切顺利。 –