第4题:简单斐波那契

来源:互联网 发布:网络打赏 人民日报 编辑:程序博客网 时间:2024/04/26 12:28

斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义斐波那契数列则可以看成如下形式:

F0=0

F1=1

Fn=Fn-1+Fn-2

我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数列中的任何一项吗?

输入包括一行,包括一个数字N(0≤N≤50)。

输出包括一行,包括一个数字,为斐波那契数列的第N项的值。

样例输入

7

样例输出

13
题目说明上存在一点歧义,Fn表示斐波那契数列的第n项,那F0是第0项,F1是第1项咯?可是按照它给出的sample,说明F0表示第1项。所以按照它的sample来。

看到通项公式可能第一想法就是调用递归函数了。的确,运用递归的算法简洁明了。首先给出递归的算法:

#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;
}

0 0
原创粉丝点击