斐波那契数列与IE9

news/2025/2/26 21:16:24

百度什么都知道:当然也包括斐波那契(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 />");
}

转载于:https://www.cnblogs.com/yjmyzz/archive/2010/10/24/1859674.html


http://www.niftyadmin.cn/n/2559812.html

相关文章

替换GINA.DLL实现自己的登陆界面

发表日期&#xff1a;2004年12月9日 出处&#xff1a;www.xiaozhou.net&#xff08;本站原创&#xff09; 作者&#xff1a;酷狗 【编辑录入&#xff1a;webmaster】 想不想拥有自己个性化的WIN2000登陆界面呢&#xff1f;本文就教你如何实现。 登陆界面示例&#xf…

文件描述符fd和重定向(dpu、dpu2)

一&#xff1a;文件描述符 文件描述符是什么&#xff1f; 文件描述符实际是一个数字&#xff0c;进程如何通过一个数组来操作文件&#xff1f; Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入0&#xff0c;标准输出1&#xff0c;错误标准输出2&am…

Handler的应用场景

如果在一个activity里面有多个线程去更新UI&#xff0c;并且都没有加锁机制&#xff0c;那就会造成更新UI错乱&#xff1b;而如果对更新UI的操作都进行加锁处理&#xff0c;就会造成性能下降。使用消息机制&#xff0c;就不必担心多线程的问题&#xff0c;因为更新UI 的操作&am…

库函数IO和系统调用

C文件I/O相关操作&#xff1a; fopen: FILE *fopen(const char *path, const char *mode); 1 #include<stdio.h>2 #include<errno.h>3 #include<string.h>45 int main()6 {7 FILE *fp;8 fpfopen("./tmp.txt","r"); //…

信号的产生

进程信号&#xff1a; 信号生命周期&#xff1a;信号的产生—>信号的注册—>信号的阻塞&#xff08;屏蔽&#xff09;—>信号的注销—>信号的处理 信号列表&#xff1a;知道有哪些信号&#xff0c;并且对应了哪些操作 kill &#xff1a;可以杀死一个进程&#xff0…

BroadcastReceiver中onReceive()方法中需要注意什么

广播接收者运行在主线程&#xff0c;所以广播接收者的onReceive()方法内不能有耗时的操作&#xff0c;需要放在子线程中做。 onReceive()的生命周期很短&#xff0c;有可能广播接收者结束&#xff0c;子线程还没有结束&#xff0c;这时广播接收者所在的进程有可能被杀掉&#x…

信号的注册、信号的注册

信号的注册&#xff08;修改信号pending位图&#xff09; 信号记录在进程pcb中&#xff1b;信号集合&#xff1a;sigset_t 结构体&#xff08;保存信号&#xff09;&#xff1a;进程记录一个信号时是通过这个结构体的位图来记录的&#xff08;1号信号在位图第0位置存储&#x…

如何实现程序开机自启动

分为三步&#xff1a; 在AndroidManifest.xml文件中定义广播和声明权限实现自定义广播类接收到广播后&#xff0c;设置Activity的启动模式 在AndroidManifest.xml文件中定义广播和声明权限 <uses-permissionandroid:name"android.permission.RECEIVE_BOOT_COMPLETED&…