• 斐波那契数列与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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    控件
    ASP.NET简介与Repeater重复器
    WinForm简介
    ADO.net测试题
    6.08练习
    高级查询几种方法
    数据库查询的几种方式
    MySQL更新(修改、查询)
    create(创建) table(表格) student<表名>
    候选键,主键,外键
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1859674.html
Copyright © 2020-2023  润新知