|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本题要求实现求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[1024];
arr[0]=arr[1]=0;
if(n==2||n==1)
{
return 1;
}
else{
int i;
for( i=2;i<=n;i++)
{
arr[i]=arr[i-1]+arr[i-2];
}
return arr[i-1];
}
}
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[0] 和 arr[1] 被初始化为 0,但实际上 Fibonacci 数列的定义是从 0 和 1 开始的。
3. 在循环中, return arr[i-1] 的位置不正确,导致返回的结果不正确。
我提供的修正后的代码中,使用了两个变量 a 和 b 来保存 Fibonacci 数列中的前两个数,然后通过循环计算第 n 个 Fibonacci 数。这样可以避免使用数组,提高了效率。
|
|