尝试用C打印一系列斐波那契数
以下是打印用户确定的若干斐波那契序列号的尝试。使用用户定义函数fibonacci(int a)。它打印错误的输出,不是一个递归序列,而是一个不断加倍的序列。如何修复代码以使其正确工作尝试用C打印一系列斐波那契数,c,fibonacci,C,Fibonacci,以下是打印用户确定的若干斐波那契序列号的尝试。使用用户定义函数fibonacci(int a)。它打印错误的输出,不是一个递归序列,而是一个不断加倍的序列。如何修复代码以使其正确工作 #include <stdio.h> int fibonacci(int a); void main() { int number, range; printf("Enter the number of Fibonacci numbers: "); scanf("%d", &a
#include <stdio.h>
int fibonacci(int a);
void main()
{
int number, range;
printf("Enter the number of Fibonacci numbers: ");
scanf("%d", &range);
number = fibonacci(range);
printf("%d\n", number);
}
int fibonacci(int a)
{
int num1 = 1;
int num2 = 1;
int position;
if (a == 1)
{
printf("%d", num1);
}
if (a == 2)
{
printf("%d\n", num1);
printf("%d", num2);
}
if (a > 2)
{
for(position = 1; a >= position; position++)
{
printf("%d\n", num1);
num1 = num2;
num2 = num1 + num2;
}
}
}
所需输出为fibonnaci序列(每个数字是前两个数字的总和):
问题在于,在循环中,您首先通过将
num2
分配给它来覆盖num1
:
num1 = num2;
然后将num2
设为自身与num1
之和,但您刚刚将num1
设为等于num2
,因此此行实际上是将num2
乘以2(即,将其添加到自身):
您需要保留旧值并将其用于求和,例如,通过添加第三个临时变量
(除此之外,您还有其他各种问题,但所有这些问题都会导致编译器警告。如果没有,请启用所有警告和/或使用更好的编译器。一旦收到警告,不要忽略它们,而是要研究每个警告的原因,并在运行代码之前修复所有警告。),你的问题是什么?我们需要一个更具体的错误语句来提供帮助。
if(a=2)
=>if(a==2)
。与(a=1)相同
这里没有问题。我不知道你想要什么。@abelenky我补充了更多的解释和一个问题。抱歉造成歧义。另外,main
的类型应该是int main
,而不是void main
。如果你正在阅读一本有void main
的书或教程,就把它扔掉。如果你的编译器没有警告你这些事情,那就找一个有警告的编译器,在你理解并修复了所有警告之前,甚至不要运行你的代码。这到底是怎么回事?我试过了,但完全失败了。@caleb132好吧,如果你知道如何声明一个变量,那么就用这些知识添加一个int
变量。然后,将num
变量之一分配给该变量,以存储其旧值,然后再为其分配新值。之后,您可以使用存储的旧值轻松修复错误…
1
1
2
3
5
8
13
...
num1 = num2;
num2 = num1 + num2;