Ответ, вероятно, ослепительно очевидный, но для жизни меня я не вижу. Я пытаюсь выяснить, сколько итераций требуется для того, чтобы положительное целое число, равное пользователю, сходилось к 1 (т. Е. Рекурсивная функция: f (x) = x/2, если x четный, 3x + 1, если x нечетный). Ответ тривиален, если выполняется грубая сила (т. Е. Через ряд утверждений if). Однако я стремился к рекурсивному подходу, и я застрял в бесконечном цикле:Рекурсия Collatz в бесконечном цикле C
#include <stdio.h>
int collatz(long number, int length)
{
while (number != 1)
{
length++;
printf("%ld\n", number);
if ((number % 2) == 0)
collatz(number/2,length);
else
collatz(3*number+1,length);
}
return length;
}
int main()
{
long number;
printf("Input a number\n");
scanf("%ld", &number);
int length=1;
printf("length is %d", collatz(number,length));
return 0;
}
Проблема возникает, когда число = 1. Вместо завершения цикла он продолжается и поэтому колеблется между 1 и 2 бесконечно.
Я чувствую, что это необходимо отметить, что это не хорошее использование рекурсии. У вас была правильная идея с циклом 'while'. Вместо рекурсивных вызовов просто обновите 'number', т. Е.' Number/= 2' и 'number = 3 * number + 1'. – user3386109