C语言实现Fibonacci数列:高效代码和优化
#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数。
代码优化:
- 修复了赋值错误: 将第9行中
if(i=1)改为if(i == 1),修复了将i赋值为1的错误,应改为判断i是否等于1。 - 修复了输出格式错误: 将第15行中
printf("1\n1");改为printf("1\n");,修复了多输出一个“1”的错误。 - 修复了循环条件错误: 将第24行中
for(j=2;j<30;j++)改为for(int i = 3; i <= n; i++),修复了循环条件错误,应根据输入的n进行循环。 - 修复了条件判断错误: 将第32行中
if(i==a[j])改为if(c == n),修复了判断条件错误,应判断计算得到的c是否等于输入的n。 - 修复了返回值错误: 将第39行中
return 1;改为return 0;,修复了返回值错误,当c不等于n时,说明n不是Fibonacci数,应返回0。 - 修复了数组越界错误: 将第14行中
a[100]改为a[30],修复了数组越界错误,应根据n的大小合理分配数组大小。
总结:
通过以上优化,代码更加简洁、高效,并修复了存在的错误。建议在使用代码时,注意代码的正确性和逻辑,并根据实际需求进行调整。
原文地址: https://www.cveoy.top/t/topic/pkon 著作权归作者所有。请勿转载和采集!