我必须编写将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;
}
答案 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;
}
您的代码问题:
因此它将打印相同的值并且循环无限地执行。