本题要求实现求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
解题思路:斐波那契数列中第一项和第二项都是1,从第三项开始就是前两项之和,即1、1、2、3、5、8、13、21......解决斐波那契数列问题一般想到使用递归处理,下面是递归的代码:
int fib(int n)
{
if (n < 0 || n > 50)
{
scanf("%d", &n);
}
else if (n == 1 || n == 2)
return 1;
else if (n == 0) return 0;
else
{
n = fib(n - 1) + fib(n - 2);
return n;
}
}
但是有一个测试点没有通过
递归调用会消耗大量时间导致N取最大值时会超时,所以不能使用递归得改用循环来做,用循环就不会出现这种情况。
int fib(int n)
{
int a = 1, b = 1;
int i, temp;
if (n > 2)
for (i = 3; i <= n; i++)
{
temp = a + b;
a = b;
b = temp;
}
else
b = 1;
return b;
}