斐波拉契数列=>多种方法的比较(分治、递归、动态规划/递推)

斐波拉契数列是一个很不错的例子,它的第一项和第二项都为1,以后的每一项都是前两项的和。

这样,斐波拉契数列可以有很多种解法。

首先用递归:

//递归for斐波那契数列 
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
long long work(int n){
if(n==1||n==2){
	return 1;
}
else{
	return work(n-1)+work(n-2);
}
}
int main()
{int n;
//freopen("fei.in","r",stdin);
//freopen("fei.out","w",stdout);
scanf("%d",&n);
printf("%lld",work(n));
return 0;	
}
普通递归的方法存在很多的重复计算。效率自然很低。比如在算f(n-1)的时候,已经把f(n-2)算出来了,但是递归还要再算一次f(n-2)。

所以采用分治,一段一段计算,减少重复计算。

二分:

//二分分治for斐波那契 
#include<cstdio>
double n;
int k;
long long s,a;
long long sishewuru(double g){
	if(g>=(int)g+0.5){
		return g+1;
	}
	else return g;
}
long long er(lo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值