发新贴  快速回复

js实现斐波那契数列

  阿吉咕噜
2017-11-15 16:42

function Box(n){

   if(n<=2){

      return 1;
   }

   return Box(n-1)+Box(n-2);

}

alert(Box(8));  // 返回21;

问题:

      1:这个函数是怎么执行的?

      2:return Box(7)+Box(6);  这一步是怎么执行的?有返回值?

 
童童

同学你好,


首先执行 Box(8)


这个函数有返回值 , 返回值是 Box(7) + Box(6)


Box(7)和 Box(6)也是函数 所以Box(7)会变成 Box(6)+Box(5),这样一层层分解下去,


直到最后 Box(2) 会 直接返回 1 Box(1)也会直接返回 1 

2017-11-16 17:24  回复本帖
 
阿吉咕噜

返回值是 Box(7) + Box(6);等于多少?


为什么最后得到的是一个具体的数字啊?我就是想不明白为什么最后是一个数字?


函数返回值是函数的相加!并不是一个具体的数字啊!

2017-11-17 08:58  回复本帖
 
童童

同学你好,


因为每次函数执行都会返回一个值 如果传入的值小于等于2 就直接返回1,


否则返回 另外两个函数返回值的和,


比如 Box(7) 执行结果就是 


Box(6) + Box(5)


上面的Box(6) 是个函数 , 所以会执行产生结果 Box(5)+Box(4)


上面的Box(5)和Box(4)都是函数,所以Box(5)产生结果 Box(4)+Box(3) ;Box(4)也是这样变成两函数执行的结果,


逐渐往下分解之后,


总会有Box(2)或者Box(1)这样的函数,这样的函数执行会直接变成1,


所以 比如 Box(3)会变成 Box(2)+Box(1)


Box(2)执行变成 1, Box(1)执行变成1


所以 Box(3)的执行结果是 1 + 1 就是2,


也就是说,所有的函数最终都会变成 若干个 函数相加的结果


 

2017-11-22 11:41  回复本帖
 
阿吉咕噜

意思是:Box(8)返回值是有很多1相加得到的结果?

2017-11-22 18:12  回复本帖
 
阿吉咕噜

童童 2017-11-22 11:41发表的内容:

同学你好,


因为每次函数执行都会返回一个值 如果传入的值小于等于2 就直接返回1,


否则返回 另外两个函数返回值的和,


比如 Box(7) 执行结果就是 


Box(6) + Box(5)


上面的Box(6) 是个函数 , 所以会执行产生结果 Box(5)+Box(4)


上面的Box(5)和Box(4)都是函数,所以Box(5)产生结果 Box(4)+Box(3) ;Box(4)也是这样变成两函数执行的结果,


逐渐往下分解之后,


总会有Box(2)或者Box(1)这样的函数,这样的函数执行会直接变成1,


所以 比如 Box(3)会变成 Box(2)+Box(1)


Box(2)执行变成 1, Box(1)执行变成1


所以 Box(3)的执行结果是 1 + 1 就是2,


也就是说,所有的函数最终都会变成 若干个 函数相加的结果


 

Box(8)返回值是有很多1相加得到的结果?
2017-11-22 18:12  回复本帖
登录 后才可以发表回复