Я новичок в C++, и код является частью задания. У меня проблема с бесконечным циклом программы. Я знаю, что бесконечный цикл встречается в последовательности (n), но я не понимаю, почему это бесконечный цикл. Я оценил процесс шаг за шагом, но, похоже, что-то не хватает.Как исправить бесконечный цикл в простой функции C++?
Ex: проблемы я столкнулся: п = 7, последовательность напечатает: 7 22 22 22 22 22
#include <cstdio>
using namespace std;
// next(n) returns the value that follows n in the hailstone sequence.
// Example: next(7) = 22, next(22) = 11, etc.
// Since the hailstone sequence ends at 1, n is required to be > 1.
int next (int n)
{
while (n > 1)
{
if (n%2 == 0)
{
return n/2;
}
else
{
return 3*n+1;
}
}
return 1;
}
// sequence(n) executes next(n) in a loop to print the next integer(s)
// in the hailstorm sequence, starting from n until ending with 1.
void sequence(int n)
{
int nextNum = n, x = next(nextNum);
while (nextNum > 1)
{
printf("%i", nextNum);
nextNum = x;
break;
}
if (nextNum == 1)
{
printf("%i", 1);
}
}
int main()
{
int n;
printf("Enter n: ");
scanf("%i", &n);
sequence(n);
return 0;
}
Эта строка должна быть эквивалентна nextNum = next (nextNum), как это, что nextNum не изменяется, когда next() возвращает значение? –
@MTee * но не *. Просто потому, что вы положили 'x = next (nextNum)' на объявление и * инициализацию * 'x', не означает, что везде' x' появляется в дальнейшем, эквивалентно замене выражения 'next (nextNum)'. 'x' не является макросом препроцессора. Это переменная. – WhozCraig
А это отличное понимание. Вы можете подумать, что строка 'x = next (nextNum);' чуть выше оператора 'while' может означать« каждый раз, когда я ссылаюсь на x, я хочу, чтобы он был следующим (nextNum) », но это не тот случай! Вы просто говорите, что вы * инициализируете * 'x' со значением' next (nextNum) '. С этого момента 'x' будет * всегда * быть тем значением, с которым вы его сначала инициализировали, если вы не измените его на что-то еще. Важно то, что '=' does ** not ** означает равенство, это означает ** присвоение **. – rwols