Javascript递归与各种循环执行效率的比较
以下分别是用递归和两种循环对斐波那契数列的简单实现。(结果仅供参考)
递归的模式:
function Fibonacci(num){
if(num <= 2){
return 1;
}else{
return Fibonacci(num - 1) + Fibonacci(num - 2)
}
}
var counter1 = new Counter();
Fibonacci(30);
counter1.show()
//Firefox 下结果为413毫秒
While循环的模式:
function FibonacciWhile(number){
if(number>2){
var num1=num2=1,times=number-2,i=1;
while(i<=times){
result = num1+num2;
num1 = num2;
num2 = result;
i++;
}
return result;
}else if(number>0){
return 1;
}
}
var counter2 = new Counter();
FibonacciWhile(3000000);
counter2.show()
//Firefox 下结果为530毫秒
For循环的模式:
function FibonacciFor(n){
if (n > 2) {
for (var i=1,f0=1,f1=1,times=n-2; i <= times; i++) {
currentFib = f0 + f1;
f0 = f1;
f1 = currentFib;
}
return currentFib;
}else if(n>0){
return 1;
}
}
var counter3 = new Counter();
FibonacciFor(3000000);
counter3.show()
//Firefox 下结果为380毫秒
递归到30花了410毫秒,While循环到3000000花了530毫秒,而For循环算到3000000之花了380毫秒。
对比一下就可以看出:
循环的效率是递归的上万倍。
不仅如此,用递归在我的电脑只能算到100以内,再多Firefox就会跳提示框出来。
所以当我们写代码的时候,能用循环还是应该多用循环.
相关文档:
最近太忙,没有时间总结工作内容了,忙里偷闲吧,共享下我的JavaScript MD5 脚本
var hex_chr = "0123456789abcdef";
function rhex(num)
{
str = "";
for(j = 0; j <= 3; j++)
str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
hex_chr.charAt((num >> (j * 8)) & 0x0F);
re ......
//1.类
function Test(id)
{
this.id=id;
this.method=function()
{
//代码
};
}
......
注册很长时间号了,刚开通博客,拿出一个自己写的javascript右键菜单,兼容IE,firefox浏览器
这是css代码
body{
font-size:12px;
}
.contextMenu{
filter:alpha(opacity=80);
opacity:0.8;
border:1px #0033FF solid;
background-color:#0099CC;
cursor:pointer;
width:120px;
position:absolute;
top: ......
1:js 字符串长度限制、判断字符长度 、js限制输入、限制不能输入、textarea 长度限制
2.:js判断汉字、判断是否汉字 、只能输入汉字
3:js判断是否输入英文、只能输入英文
4:js只能输入数字,判断数字、验证数字、检测数字、判断是否为数字、只能输入数字
5:只能输入英文字符和数字
6: js email验证 、js 判断 ......