最近在网上看了一个帖子讨论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>
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>
解决方案 »
- 求教MainBox.style.left怎么就是取不到呢?
- 怎样在C#里调用javascript里的函数??注意函数是带参数的
- String.matches() 正则表达试的问题,麻烦看下,谢谢
- "a a"的问题...
- netscape中如何播放rm或者其他格式的视频文件?
- 我忘记了Windows2003超级用户密码,怎么办?
- IE5.0 JS 可输入下拉框 clip问题
- 一棵自己种的树(用oracle的图形化查询还挺管用的,种一棵树就一条sql搞定)
- javascript如何让这张图片居中显示?
- 求助!做购物网站的购物车怎么循环遍历出加入购物车的商品并且用js实现全选,反选,数量选择
- 很简单的分割字符串成数组
- I want use Glenn.App.$$("humanName").value="bbc"; to orgnize the namespace. how
执行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
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
看好啊
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