Отслеживание счета в моей рекурсивной функции (Collatz)

У меня возникли проблемы, пытаясь выяснить, как отслеживать количество раз, когда моя рекурсивная функция вызывает себя при выполнении функции collatz. У меня есть определение функции:

template<class myType>
myType recursionSet<myType>::collatz(myType n)
{
if(n == 1)
return 1;
else {
if(n%2 == 1)
return collatz(3*n+1);
else
return collatz(n/2);
}
}

Как я могу отслеживать количество раз, когда эта функция вызывает себя? Я не могу представить, чтобы моя жизнь могла найти решение. Спасибо!

ссылка на функцию Коллатца: http://www.xamuel.com/collatz-recursion/

1

Решение

Вы пытаетесь вычислить длину цепи Коллатца, не так ли? Вы понимаете, что в настоящее время вы всегда возвращаетесь 1? Вы должны изменить свой код, чтобы вместо этого возвращалось количество. Это означает добавление текущей итерации к рекурсивному вызову:

template<class myType>
myType recursionSet<myType>::collatz(myType n)
{
if(n == 1)
return 1;
else {
if(n%2 == 1)
return 1 + collatz(3*n+1);
else
return 1 + collatz(n/2);
}
}
2

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

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