-
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:
-
输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入包括一个整数n(1<=n<=70)。
-
输出:
-
对应每个测试案例,
输出第n项斐波那契数列的值。
-
样例输入:
-
3
-
样例输出:
-
2
题目解析:
可以用递归实现,不过会有大量的重复性操作,既然学过了动态规划,利用备份来优化程序。就需要设立O(n)的空间。但是由于递归中n只与前两个n-1和n-2有关系,因此只设两个变量即可。
代码:
#include <stdio.h>
#include <stdlib.h>
long long Fibonacci(unsigned n);
int main(void)
{
unsigned n;
while(scanf("%d",&n) != EOF){
if(n<0)
continue;
long long r = Fibonacci(n);
printf("%ld\n",r);
}
return 0;
}
long long Fibonacci(unsigned n)
{
int result[2] = {0,1};
if(n < 2)
return result[n];
long long fibone = 1;
long long fibzero = 0;
long long fibn = 0;
for(unsigned i = 2;i <= n;i++){
fibn = fibone + fibzero;
fibzero = fibone;
fibone = fibn;
}
return fibn;
}