问题描述
本题要求实现求Fabonacci数列项的函数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
函数接口定义:
int fib( int n );
函数fib应返回第n项Fibonacci数。题目保证输入输出在长整型范围内。
裁判测试程序样例:
#include <stdio.h>
int fib( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", fib(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
输出样例:
13
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
解析
本题求解斐波那契数列,提供三种思路:递归求解法、逐项迭代法、数组法。其中递归法是我最先想到的,但是很遗憾,系统给我判定运行超时,就又写了另外两种方法。有时候递归求解很容易造成运行超时,这时候需要另辟蹊径。
代码
/*错误示范int fib( int n )
{
if(n==1||n==2) return 1;
return fib(n-1)+fib(n-2);
}*/
/*int fib( int n )
{
int x=1,y=1,res=1;
for(int i=3;i<=n;i++)
{
res=x+y;
x=y;
y=res;
}
return res;
}*/
#include <stdlib.h>
int fib( int n )
{
int *res=(int *)malloc(sizeof(int)*(n+1));
res[1]=res[2]=1;
for(int i=3;i<=n;i++) res[i]=res[i-1]+res[i-2];
return res[n];
}