Fibbonacci Number
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 25027 Accepted Submission(s): 11501
Problem Description
Your objective for this question is to develop a program which will generate a fibbonacci number. The fibbonacci function is defined as such:
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Your program should be able to handle values of n in the range 0 to 50.
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Your program should be able to handle values of n in the range 0 to 50.
Input
Each test case consists of one integer n in a single line where 0≤n≤50. The input is terminated by -1.
Output
Print out the answer in a single line for each test case.
Sample Input
3
4
5
-1
Sample Output
2 3 5
you can use 64bit integer: __int64
Hint
Note:就是斐波那契数列嘛,然后别用递归做,时间复杂度太大了。改用循环做就行了。
代码附上:
#include <iostream> #include<math.h> #include <iomanip> #include<cstdio> #include<string> #include<map> #include<vector> #include<list> #include<algorithm> #include<stdlib.h> #include<iterator> #include<sstream> #include<string.h> using namespace std; long long F(int n) { if(n==0) { return 0; } else if(n==1) { return 1; } return F(n-1)+F(n-2); } int main() { int n; while(cin>>n) { if(n==-1) { break; } long long sum[51]={0}; // cout<<sum[0]<<endl; sum[0]=0; sum[1]=1; for(int i=0;i<=n;i++) { if(i==0||i==1) { continue; } else { sum[i]=sum[i-1]+sum[i-2]; } } cout<<sum[n]<<endl; } return 0; }
感觉如果把sum函数放在 循环的外面可能会让速度更快点。