Последовательность, которую я вычисляю (град), печатается дважды, когда нужно печатать один раз

Так что в основной части моей программы есть раздел, где я вызываю функцию града, чтобы ответить на вопрос в операторе печати.
Вместо того, чтобы печатать последовательность один раз, она печатает дважды, и я не знаю, почему или как это исправить.
Есть ли способ исправить это и удалить оператор print из функции next (n)?
Кроме того, я хотел знать, все ли мои комментарии в порядке?
Мне трудно писать достойные контракты, поэтому любые советы и критические замечания по ним будут отличными. Но главное — заставить последовательность града печатать один, а не два раза.

// Program hailstone takes a number and gives a sequence of
// numbers starting with the input(n). The sequence alogrithm
// is (3n+1) then the next number is the previous divided by two.#include <cstdio>
using namespace std;

// The function next(n)takes an integer value n and
// returns the number that follows n in a hailstone sequence.
// For example: next(7) = 22 and next(22) = 11.

int next(int n)
{
if (n > 1)
{
if ((n % 2) == 0 )
{
n = n / 2;
}
else
{
n = 3 * n + 1;
}
printf("%i ",n);
}
return n;
}

// The function hailstone reads int n and
// prints its entire hailstone sequence.

void hailstone(int n)
{
while(n>1)
{
n = next(n);
}
}

// Parameters: int length, int n
// Uses next function, to calculate the length of the sequence.
int length(int n)
{
int length = 1;
while (n > 1)
{
n = next(n);
++length;
}
return length;
}

int main()
{
int n;

printf("What number shall I start with? ");
scanf("%i", &n);

printf("The hailstone sequence starting at %i is:", n);
hailstone(n);

printf("\nThe length of the sequence is: %i", length(n));

return 0;
}

1

Решение

Не помещайте заявление печати в следующем. Поместите это в град.
Он появляется дважды, потому что он напечатан один раз с града и один раз с длины.

2

Другие решения

Других решений пока нет …