斐波那契数列

1、第一次尝试最简单的递归调用,排除掉n=0,1的特殊情况,剩下的情况根据f(n)=f(n-1)+f(n-2)递归调用。虽然语法正确,但是当n较大时很快产生栈溢出

function Fibonacci(n){
	if(n == 0){
	return 0; 
	}else{
	return n > 1 ? Fibonacci(n-1)+Fibonacci(n-2):1;
	}
}

2、循环版
发现每次计算只需用到最近的两个值,所以借助三个变量分别存储结果,前一个值和后一个值。每执行一次循环,将当前结果作为下一次计算的前一个值,将当前结果的前一个值作为下次计算结果的前两个值。

function Fibonacci(n){    
	if(n == 0){        
	return 0;}else if(n ==1){        
	return 1;}else{        
	var c = 0, a = 0,b =1;        
	for(var i =2;i <= n;i++){
	c = a + b;
	a = b;
	b = c; 
	} 
	return c;
	}
}

循环简化版1
可以简化为两个变量保存到数组中进行读取和赋值

function Fibonacci(n){        
	if(n===0){
	return 0;}
	if(n===1){
	return 1;}        
	var a=0,b=1;
	for(var i = 2;i<=n;i++){           
	[a,b]=[b,a+b];}
	return b;
	}

循环简化版2
定义最初的两个值,将相加结果保存到第二个变量,同时又作为下次计算的第二个变量,那么下次计算的第一个变量为当前结果减去上次计算的第一个变量

function Fibonacci(n){
	if(n===0){return 0;}
	if(n===1){return 1;}
	var a=0,b=1;
	for(var i = 2;i<=n;i++){
	 b = b + a;
	 a = b - a; }
	 return b; 
	 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值