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;
}
这个效率比递归高。