Подтвердить что ты не робот

Разница между рекурсией головы и хвоста

Я пытаюсь получить разницу между этими двумя рекурсивными стратегиями.

Мне было сказано следующее:

Рекурсия хвоста: Вызов является хвостовым рекурсивным, если ничего не нужно делать после того, как вызов возвращается, то есть когда вызов возвращается, возвращаемое значение немедленно возвращается из вызывающей функции

Head Recursion:. Вызов является рекурсивным, когда первый оператор функции является рекурсивным.

4b9b3361

Ответ 1

В head recursion рекурсивный вызов, когда это произойдет, предшествует другой обработке в функции (подумайте, что это происходит в верхней части или голове функции).

В tail recursion, его противоположность - обработка происходит до рекурсивного вызова. Выбор между двумя рекурсивными стилями может показаться произвольным, но выбор может иметь значение.

Функция с путём с единственным рекурсивным вызовом в начале пути использует так называемую рекурсию головы. Факториальная функция предыдущего экспоната использует рекурсию головы. Первое, что он делает, когда оно определяет, что требуется рекурсия, - это вызвать себя с декрементированным параметром. Функция с единственным рекурсивным вызовом в конце пути использует хвостовую рекурсию. Обратитесь к этой статье

Пример рекурсии:

public void tail(int n)              public void head(int n)
{                                       {
   if(n == 1)                             if(n == 0)
      return;                                return;
   else                                   else
      System.out.println(n);                 head(n-1);

   tail(n-1);                              System.out.println(n);
}                                        }

Если рекурсивный вызов встречается в конце метода, он называется tail recursion. Рекурсия хвоста similar to a loop. method executes all the statements before jumping into the next recursive call.

Если рекурсивный вызов происходит на beginning of a method, it is called a head recursion. method saves the state before jumping into the next recursive call.