递归算法是不可取的。由于效率非常低,并且还有栈溢出的风险。
应该使用例如以下的迭代解法:
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;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。