斐波那契数列与IE9

百度什么都知道:当然也包括斐波那契(Fibonacci)数列

在一般算法教材中,把Fib数列都是当做递归的经典示例来讲解的:

javascript的写法如下: 

//递归法(计算到fib(40)时浏览器就挂掉了)

function fib(n){	

	if (n<=2){

		return 1;

	}	

	return fib(n-1) + fib(n-2);

}

在IE9以下的IE浏览器中,跑到fib(40)基本上浏览器就罢工了,比如:

for(var j=1;j<=40;j++){

	document.write("fib(" + j +  ")=" + fib(j) + "<br />");

}

但是在IE9下,居然能挺过来,看来IE9对javascript引擎的优化确实效果不错

当然,这个数列除了递归,还有其它非递归的解法,一并贴在这里收录一下:

//递归法(计算到fib(40)时浏览器就挂掉了)

function fib(n){	

	if (n<=2){

		return 1;

	}	

	return fib(n-1) + fib(n-2);

}





for(var j=1;j<=40;j++){

	document.write("fib(" + j +  ")=" + fib(j) + "<br />");

}





document.write("<hr />");



//非递归法1

function fib2(n){

	var temp=i=f1=f2=1;	

	if (n<=2){

		return 1;

	}

	else

	{

		for(i=3;i<=n;i++){

			temp = f1+f2;

			f2=f1;

			f1=temp;

		}

		return temp;

	}

}



//测试

for(j=1;j<=40;j++){

	document.write("fib2(" + j +  ")=" + fib2(j) + "<br />");

}



document.write("<hr />");



//非递归法2

function fib3(n){

	if (n<=2){

		return 1;

	}

	var x=0,y=1;

	for (var j=1;j<n;j++) {

		y = x + y;

		x = y - x;	

	} 

	return y;

}



//测试

for(j=1;j<=40;j++){

	document.write("fib3(" + j +  ")=" + fib3(j) + "<br />");

}

你可能感兴趣的:(ie9)