递归算法是不可取的,因为效率很低,而且还有栈溢出的风险。
应该使用如下的迭代解法:
int Fibonacci(unsigned int n)
{
if(n <= 0)
{
return 0;
}
if(n == 1)
{
return 1;
}
int i = 0,j = 1,m;
unsigned int k;
for(k = 2; k <= n; k++)
{
m = i+j;
i = j;
j = m;
}
return m;
}
但是对于这题来说,上面的代码还是不行的,应该返回值用long long类型:
-
题目描述:
-
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:
-
输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入包括一个整数n(1<=n<=70)。
-
输出:
-
对应每个测试案例,
输出第n项斐波那契数列的值。
-
样例输入:
-
3
-
样例输出:
-
2
/*
斐波那契数列
by Rowandjj
2014/7/24
*/
#include<stdlib.h>
#include<stdio.h>
long long Fibonacci(unsigned int n)
{
if(n <= 0)
{
return 0;
}
if(n == 1)
{
return 1;
}
long long i = 0,j = 1,m;
unsigned int k;
for(k = 2; k <= n; k++)
{
m = i+j;
i = j;
j = m;
}
return m;
}
int main()
{
unsigned int n;
while(scanf("%d",&n) != EOF)
{
printf("%lld\n",Fibonacci(n));
}
return 0;
}