qzyx
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
函数接口定义:
int f( int n );
函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。
裁判测试程序样例:
#include <stdio.h>
int f( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
6
输出样例:
8
我的代码哪里错了
int f( int n )
{
int arr;
arr=arr=0;
if(n==2||n==1)
{
return 1;
}
else{
int i;
for( i=2;i<=n;i++)
{
arr=arr+arr;
}
return arr;
}
} int f(int n)
{
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
int a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return c;
}
}
这段代码中存在几个问题:
1. 数组arr的大小应该根据n动态分配,而不是固定为 1024。这种固定大小的数组可能会导致内存溢出。
2. 在arr数组中, arr和arr被初始化为 0,但实际上 Fibonacci 数列的定义是从 0 和 1 开始的。
3. 在循环中, return arr的位置不正确,导致返回的结果不正确。
我提供的修正后的代码中,使用了两个变量a和b来保存 Fibonacci 数列中的前两个数,然后通过循环计算第n个 Fibonacci 数。这样可以避免使用数组,提高了效率。
页:
[1]