yangzhixiaohuli 发表于 2023-11-16 19:45:29

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

isdkz 发表于 2023-11-16 19:45:41

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]
查看完整版本: qzyx