最近在网上看了一个帖子讨论Javascript递归函数的,下面的例子是一个斐波纳契算法,小弟实在弄不清楚 
return (Fibonacci(n-1)+Fibonacci(n-2));这段递归的执行过程,当输入数字6时小弟调试n的递归值分别为:654321 2321 4321 2 结果为8。小弟的问题是递归的执行过程是怎样的,值8是怎么得到了。
<html>    <head><title> 递归函数的使用方法 </title>    <script language=javascript>        <!--        function Fibonacci(n){ // 定义函数
alert(n);
            if ((n==1) || (n==2)) {               return 1;            }            else {               return (Fibonacci(n-1)+Fibonacci(n-2));            }        }        //-->            </script>    </head>    <body>       <script language="JavaScript">         <!--         var userinput=eval(prompt("请输入计算第几个Fibonacci数:", ""));         var total=Fibonacci(userinput); //调用递归函数         alert("第"+ userinput +"个Fibonacci为:"+total);         //-->              </script>    </body>    </html>

解决方案 »

  1.   

    输入6时
    执行f(6)
    =f(5)+f(4)
    =f(4)+f(3)+f(3)+f(2)
    =f(3)+f(2)+f(2)+f(1)+f(2)+f(1)+1
    =f(2)+f(1)+1+1+1+1+1+1
    =1+1+6
    =8
      

  2.   

    输入6时
    f(6)
    =f(5)+f(4)
    =f(4)+f(3)+f(4)
    =f(3)+f(2)+f(3)+f(4)
    =f(2)+f(1)+f(2)+f(3)+f(4)
    =3+f(3)+f(4)
    =3+f(1)+f(2)+f(4)
    =5+f(3)+f(2)
    =5+f(2)+f(1)+f(2)
    =8
      

  3.   

    运算顺序是吧
    看好啊
       f(6) //6
    => f(5) + f(4)//5 
    => f(4) + f(3) + f(4)//4 
    => f(3) + f(2) + f(3) + f(4)//3 
    => f(2) + f(1) + f(2) + f(3) + f(4)//2 
    => 1 + f(1) + f(2) + f(3) + f(4)//1
    => 1 + 1 + f(2) + f(3) + f(4)//2
    => 1 + 1 + 1 + f(3) + f(4)//3
    => 1 + 1 + 1 + f(2) + f(1) + f(4)//2
    => 1 + 1 + 1 + 1 + f(1) + f(4)//1
    => 1 + 1 + 1 + 1 + 1 + f(4)//4
    => 1 + 1 + 1 + 1 + 1 + f(3) + f(2)//3
    => 1 + 1 + 1 + 1 + 1 + f(2) + f(1) + f(2)//2
    => 1 + 1 + 1 + 1 + 1 + 1 + f(1) + f(2)//1
    => 1 + 1 + 1 + 1 + 1 + 1 + 1 + f(2) //2
    => 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 8