2016-12-06 52 views
-1

有人可以解释这个代码是如何工作的?它是codeacademy递归js上的代码。该代码使用Fibonacci序列确定增长率。代码输出Fibonacci Beanstalk递归javascript

var height = growBeanstalk(5) // 5 
var height = growBeanstalk(8) // 21 etc. 
(4) => //3 (3) => //2 

预先感谢您!

function growBeanstalk(years) { 
// Base case 
if (years <= 2) { 
    return 1; 
} 
// Recursive case 
return growBeanstalk(years - 1)+ growBeanstalk(years - 2); 
} 

// Set the height of the beanstalk using your function 
var height = growBeanstalk(); 

console.log(height); 
+0

[JavaScript的斐波那契崩溃(可能的重复http://stackoverflow.com/questions/18980531/javascript-斐波那契分解) – Prune

+0

堆栈溢出有许多很好的解释递归使用斐波那契序列;几个在JavaScript中。在对这个话题进行研究之后,你对此感到困惑吗? – Prune

+0

例如在growBeanstalk的情况下,我很困惑(8)它给出21,我知道它是8 + 13,但是为什么以及在哪里陈述?为什么直到5返回5,6 => 8,7 => 13。为什么6返回8? –

回答

0

基本上,当你调用growBeanstalk会的过程中,执行该功能,首先它会检查数量为2或更少,这就是所谓的“基本情况”,这将是这种情况递归结束。

函数的其他部分是递归本身,基本上是再次调用它本身,减去1和2,并因此确保该函数有时会结束。

这是功能如何被称为例如,当你调用与4

growBeanstalk(4) -> 3 
    |----growBeanstalk(3) -> 2 
     |---growBeanstalk(2) -> 1 
     |---growBeanstalk(1) -> 1 
    |----growBeanstalk(2) -> 1 
+0

感谢您的解释,但它是如何工作的?我的意思是递归,就像5的情况?因为5-1 = 4,5-2 = 3,4 + 3 = 7,但它返回5,其中是语句还是有条件的,它决定了斐波那契?对不起,我只是一个初学者。 –