Код обратной последовательности Коллатца не вычисляется

Используя C ++, я писал программу, которая брала бы первые n чисел, начиная с 1, и выводила их соответствующий «счетчик путей», который я и называю количеством итераций последовательности Коллатца, которое требуется, чтобы получить число от нуля ( увидеть Статья в википедии на гипотезе Коллатца). Например, номер пути 8 равен 3, поскольку для перехода к 1 требуется 3 шага (8: 2 = 4; 4: 2 = 2; 2: 2 = 1).

Таким образом, мы имеем простую функцию:

int pathNumber(int n){
int pathCount = 0;
while(n > 1){
if(n % 2 == 0){
n /= 2;
}else{
n *= 3;
n ++;
}
pathCount ++;
}
return pathCount;
}

Затем я решил написать обратную функцию этого (называемую firstInstanceOf (n)), которая будет вычислять первый экземпляр любого заданного pathNumber в порядке возрастания от 1. Например, firstInstanceOf (3) будет 8, потому что 8 является первым число в порядке возрастания от 1, для которого pathCount равен 3. Функция, которую я написал, выглядит следующим образом:

int firstInstanceOf(int s){
int i = 0;
while(pathNumber(i) != s){
i ++;
}
return i;
}

где s — входное значение, а i — переменная, которая увеличивается на 1 каждый раз. Как бы просто это ни казалось, код компилируется без каких-либо предупреждений, но просто не будет вычисляться. Я попытался переформатировать последнюю функцию в виде цикла for, бесконечного цикла и т. Д., Но программа все еще сохраняет буферизацию на неопределенный срок или вывод фиктивных значений. Я чувствую, что упускаю что-то очень очевидное? Любая помощь приветствуется.

0

Решение

Задача ещё не решена.

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

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