在学习javascript,一本书上后面有个习题:
编写一个计算Fibonacci数的程序,要求让用户输入n值,并显示计算结果。
Fibonacci的定义为:Fn=Fn-1+Fn-2,F1=1,F2=1,n=3,4....前几个Fibonacci数为:1,1,2,3,5,8,13........
首先是我自己写的
<html>
<head><script language="javascript">
var a=1;
var b=1;
var i=2;
var current;
function dell(n){
current=a+b;
b=a;
a=current;
i++;
if(i==n){
return current;
}
else{
return dell(n);
}
}
</script></head>
<body>
<script language="javascript">
var userinput=eval(prompt("请输入N的置:",""));
var total=dell(userinput);
alert(total);
</script>
</body>
</html>
我里面dell函数的思路是用current来记录当前的Fibonacci的值,我初始了i=2,也就是没有管n=1,2的时候,检测i的值是否和n值相同,相同就返回当前的
current
否则继续递归dell函数
我看了参考答案,是这样写的
<html>
<head><title> 7-4参考答案 </title>
<script language=javascript>
<!--
function Fibonacci(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>
我发现在运行参考答案的时候,n的数值太大的时候就有问题了,浏览器非常卡,并且提示
这个是否说明我的程序比较有效率,是什么原因造成的?知道的人指点下