zoukankan      html  css  js  c++  java
  • 斐波那契数列与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 />");
    }
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    C++11 学习总结
    平衡二叉树 (AVL) 笔记
    拼图模板
    2013.9.12
    2013.9.11
    2013.9.10
    2013.9.9
    下载网站
    ubuntu 安装codeblocks
    12个球称3次找坏球的完美解答
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1859674.html
Copyright © 2011-2022 走看看