Я попытался найти примеры хвостовой рекурсии, и я действительно не вижу разницы между регулярным и хвостом. Если это не хвостовая рекурсия, может кто-нибудь сказать мне, почему ее нет?Является ли эта хвостовая рекурсия?
public static long fib(long index) {
// assume index >= 0
if (index == 0) // Base case
return 0;
else
if (index == 1) // Base case
return 1;
else
// Reduction and recursive calls
return fib(index - 1) + fib(index - 2);
} // end of method fib(long index)
Ваш ответ велик, за исключением этой строки: «Таким образом, метод рекурсивный, но не рекурсивный». Как вы подразумевали в начале вашего ответа, хвостовая рекурсивность является атрибутом рекурсивного вызова, а не метода. Вы можете сказать, что метод TR, если все сайты вызовов являются TR, но это упрощение, которое может смутить читателей, включая OP. – Gene
@ Óscar López - Я не знаком с частью "? B:" что это делает? – BluceRee
@BluceRee это условное выражение. Тот же код эквивалентен 'if (n == 0) return b; else return fib (n-1, a + b, a); ' –