Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试用C打印一系列斐波那契数_C_Fibonacci - Fatal编程技术网

尝试用C打印一系列斐波那契数

尝试用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

以下是打印用户确定的若干斐波那契序列号的尝试。使用用户定义函数fibonacci(int 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;