Fibbonacci Number
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15446 Accepted Submission(s): 7634
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 5you can use 64bit integer: __int64HintNote:
Author
Lily
Source
//@auther yangZongJun
/********************************************//**
Date : 2014/02/17
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2070
题 意:斐波那契数列(记忆化简单)
解题思路:数组记录
***********************************************/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
#define PI acos(-1.0)
#define EPS 1e-8
const int MAXN = 51;
const int INF = 2100000000;
long long f[MAXN];
int n;
/*
如此简单的一道水题竟然都wa了好几次,开始写fibonacci时
递归和循环的两中写法给混到一起去了,简直是。。。
*/
//写错了
//long long fib(int n)
//{
// f[0] = 0; f[1] = 1;
// for(int i = 2; i <= n; i++)
// {
// if(i == 0) return 0;
// if(i == 1) return 1;
// if(f[i]!= 0) return f[i];
else return f[i] = f[i-1]+f[i-2];
// else return f[i] = fib(i-1)+fib(i-2);
// }
//}
//法1:递归+记忆化
long long fib(int i)
{
f[0] = 0; f[1] = 1;
if(i == 0) return 0;
if(i == 1) return 1;
if(f[i]!= 0) return f[i];
// else return f[i] = f[i-1]+f[i-2];
else return f[i] = fib(i-1)+fib(i-2);
}
//法2:直接循环记录结果
//void fib()
//{
// f[0] = 0; f[1] = 1;
// for(int i = 2; i <= 50; i++)
// {
// f[i] = f[i-1]+f[i-2];
// }
//}
int main()
{
// calc_f();
//fib();
// freopen("input.txt", "r", stdin);
while(scanf("%d", &n) && n!=-1)
{
//printf("%I64d\n", f[n]);
printf("%I64d\n", fib(n));
}
return 0;
}