斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义斐波那契数列则可以看成如下形式:
F0=0
F1=1
Fn=Fn-1+Fn-2
我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数列中的任何一项吗?
输入包括一行,包括一个数字N(0≤N≤50)。
输出包括一行,包括一个数字,为斐波那契数列的第N项的值。
样例输入
7
样例输出
13
看到通项公式可能第一想法就是调用递归函数了。的确,运用递归的算法简洁明了。首先给出递归的算法:
#include<stdio.h>
int Fibonacci(int n);
int main(void){
int n, res;
scanf("%d", &n);
if(n <= 0 || n > 50)
return 0;
res = Fibonacci(n-1);
printf("%d", res);
return 0;
}
int Fibonacci(int n) {
int sum = 0;
if (n == 0 || n == 1)
return 1;
else
sum = Fibonacci(n-1) + Fibonacci(n-2);
return sum;
}
但是,由于递归是比较耗资源的,所以尽可能用非递归算法来实现,代码如下:
#include<stdio.h>
int main(void){
int n, i;
int a[51];
a[0] = a[1] = 1;
scanf("%d", &n);
if(n <= 0 || n > 50)
return 0;
for(i = 2; i < n; i++)
a[i] = a[i-1]+a[i-2];
printf("%d", a[n-1]);
return 0;
}