Fibonacci序列while循环

时间:2016-02-15 05:08:58

标签: c fibonacci

我必须编写将Fibonacci序列显示给用户所需术语数的代码,并且还必须使用while循环。我不确定为什么这段代码不起作用。

#include <stdio.h>
#include <stdlib.h>
int main (void) {
    int max;
    printf("Enter the max term of the Fibonacci Sequence:\n");
    scanf("%i", &max);
    int a=0;
    int b=0;
    a=2;

    while(a<max) {
        if((a==0||a==1))
        {
            printf("%i\n", &a);
            ++a;
        }
        else if(a>1)
        {
            a=(a-1)+(a-2);
            printf("%i\n", &a);
            ++a;
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

在您的计划开始时(while循环之前)a为2(请参阅第a=2行)。

while循环中,您执行以下操作:

a=(a-1)+(a-2); // a = 2-1+2-2 i.e. a = 1

及其之后

++a; // a == 2

所以,再次a==2之后。这个循环永远不会结束。

但这是技术问题。更重要的是,您正在尝试计算不是斐波纳契数列。在Fibonacci序列中,每个后续数字是前两个数字的总和。但是在你的代码中增加了两个以前的Fibonacci序列数,但前两个自然数。

你有变量b,因为有人告诉你添加它。这是对的!请记住b中斐波纳契序列的先前找到的元素。当您知道前一个元素和当前元素时,可以计算下一个元素。

答案 1 :(得分:0)

你可以试试这个。

#include <stdio.h>
#include <stdlib.h>
int main (void) {
   int max;
   printf("Enter the max term of the Fibonacci Sequence:\n");
   scanf("%i", &max);
   int n=0;
   int a=0;
   int b=1;
   int next;

   while(n<max) {
      if ( n <= 1 )
        {
          next = n;
          n++;
        }
      else
       {
         next = a + b;
         a = b;
         b = next;
         n++;
       }
    printf("%d\n",next);
}
return 0;

}

您的代码问题:

  1. 你正在初始化a = 2 =&gt;它不会先取决于循环 - &#39; 0&#39; 0将不会打印在您的结果中。
  2. α=(A-1)+(A-2);即a = 1 然后你在做++ a; =&GT; a == 2.因此它再次以相同的a == 2循环。
  3. 因此它将打印相同的值并且循环无限地执行。