#include<stdio.h>

int fib(int n);
int main()
{
    int m, n, i;
    printf("Input m:");
    scanf("%d", &m);
    printf("Input n:");
    scanf("%d", &n);
    
    for(i = m; i <= n; i++)
    {
        if(i == 1)
            printf("1\n");
        else if(fib(i) == 1)
            printf("%d\n", i);
    }
}

int fib(int n)
{
    int a = 1;
    int b = 1;
    int c;
    if(n == 1 || n == 2)
        return 1;
    else
    {
        for(int i = 3; i <= n; i++)
        {
            c = a + b;
            a = b;
            b = c;
        }
        if(c == n)
            return 1;
    }
    return 0;
}

算法解释:

Fibonacci数列的定义:数列的第一、第二个数都为1,后面的每个数都是前两个数之和。

本代码使用了递归的方法来实现Fibonacci数列的计算。函数fib(n)用来计算第n项Fibonacci数。

代码优化:

  1. 修复了赋值错误: 将第9行中if(i=1)改为if(i == 1),修复了将i赋值为1的错误,应改为判断i是否等于1。
  2. 修复了输出格式错误: 将第15行中printf("1\n1");改为printf("1\n");,修复了多输出一个“1”的错误。
  3. 修复了循环条件错误: 将第24行中for(j=2;j<30;j++)改为for(int i = 3; i <= n; i++),修复了循环条件错误,应根据输入的n进行循环。
  4. 修复了条件判断错误: 将第32行中if(i==a[j])改为if(c == n),修复了判断条件错误,应判断计算得到的c是否等于输入的n
  5. 修复了返回值错误: 将第39行中return 1;改为return 0;,修复了返回值错误,当c不等于n时,说明n不是Fibonacci数,应返回0。
  6. 修复了数组越界错误: 将第14行中a[100]改为a[30],修复了数组越界错误,应根据n的大小合理分配数组大小。

总结:

通过以上优化,代码更加简洁、高效,并修复了存在的错误。建议在使用代码时,注意代码的正确性和逻辑,并根据实际需求进行调整。


原文地址: https://www.cveoy.top/t/topic/pkon 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录