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.
 

 

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
Hint
Note:
you can use 64bit integer: __int64

 

就是斐波那契数列嘛,然后别用递归做,时间复杂度太大了。改用循环做就行了。

代码附上:

#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函数放在 循环的外面可能会让速度更快点。