У меня есть этот метод:Удаление хвостовой рекурсии из метода (Java)
private String computePerm(int iteration) {
if (iteration < n + 1) {
return Character.toString((char) (iteration + 48));
} else {
if (iteration % n == 0) {
return computePerm((iteration/n) - 1) + computePerm(((iteration - 1) % n + 1));
} else {
return computePerm(iteration/n) + computePerm(iteration % n);
}
}
}
вычисляет перестановку индуцированную одной поиска в ширину обхода. Я использую его для решения Post's correspondence problem. Тем не менее, я подозреваю, что он хвост-рекурсивный, и, по-видимому, он несет уродливые накладные расходы на некоторые случаи проблемы.
Как удалить хвостовую рекурсию при сохранении поведения метода?
Есть 4 рекурсивных вызовов в вашем методе. Это не рекурсия хвоста. – shmosel
@shmosel Затем как удалить рекурсию в первую очередь? Я, честно говоря, не могу так поступать, потому что подозреваю, что это будет немного быстрее. –
Кто сказал, что вы можете? И почему вы уверены, что это будет быстрее? – shmosel