C.斐波那契数列

Description
多组测试数据。
每组数据输入一个区间[n,m],根据提供的主函数main(),定义函数sumFibo(),完成输出斐波那契数列中第n项到第m项的和。
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。
 
Input
每组测试数据输入整数n和m(0<n<m<=30),整数之间由空格分隔。
Output
根据每组输入数据,输出斐波那契数列中第n项到第m项的和。
Sample Input
1 7
2 4
Sample Output
20
4
Hint

只使用给定主函数

int main()

{
   int x,y,s;
   while(cin>>x>>y){
        s=sumFibo(x,y);
        cout<<s<<endl;
    }
   return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n;
int fibo(int a) {
	if (a == 1)return 0;
	else if (a == 2)return 1;
	else return fibo(a - 1) + fibo(a - 2);
 }
int sumFibo(int x, int y) {
	int sum = 0;
	for (int i = x;i <= y;i++) {
		sum += fibo(i);
	}
	return sum;
}
int main()

{
	int x, y, s;
	while (cin >> x >> y) {
		s = sumFibo(x, y);
		cout << s << endl;
	}
	return 0;
}

这个递归效率十分低;

下面是迭代的算法;即使用另一个变量保存总和,进行迭代;

int Fibo(int n) {
	if (n == 0) return 0;
	if (n == 1 || n == 2)return 1;
	int one = 1,two = 1,res = 0;
	//如果n>3使用迭代
	for (int i = 3;i <= n;i++) {
		res = one + two;
		one = two;
		two = res;
	}
	return res;
}

这个效率比递归高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou_fan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值