日期:2014-05-16  浏览次数:20416 次

请问一下递归(斐波拉契数列)的执行顺序
var a = 0;
function foo(x){
  if(x > 0){foo(x-1);}
  return a += x;
}
console.log(foo(5));
请问这个是如何执行的?

------解决方案--------------------
这个问题,你可以写个页面,然后用调试工具通过监视变量x自己就能试出来,我就这么试出来的,可能不是很准确,说下我理解的流程:
执行foo(5);进入if(x>0)的判断,为真,则执行foo(4);再进入if(x>0)的判断,为真,进入foo(3);……
直到执行foo(0);x>0的判断为假,执行【foo(0)内的】return a +=x; a= 0;
foo(0)函数执行完毕,则foo(1)的if(x>0)判断结束,执行【foo(1)内的】return a +=x; 返回a=1;
foo(1)函数执行完毕,则foo(2)的if(x>0)判断结束,执行【foo(2)内的】return a +=x; 返回a=3;
foo(2)函数执行完毕,则foo(3)的if(x>0)判断结束,执行【foo(3)内的】return a +=x; 返回a=6;
foo(3)函数执行完毕,则foo(4)的if(x>0)判断结束,执行【foo(4)内的】return a +=x; 返回a=10;
foo(4)函数执行完毕,则foo(5)的if(x>0)判断结束,执行【foo(5)内的】return a +=x; 返回a=15;
得值:15
希望对你有帮助

------解决方案--------------------
我用的火狐浏览器和firebug调试的