Как рекурсия реализована в Java

Как рекурсия реализована в Java? Мой вопрос о том, что происходит, когда в Java выполняется рекурсивный метод. Я смутно понимаю, что он использует стек, но я ищу четкое объяснение с примером.

 Ozair Kafray22 мая 2012 г., 12:51
Это «Стек» не складывается;)
 18bytes22 мая 2012 г., 12:51
@AmitBhargava Ссылка объясняет, что такое рекурсия, но я ищу, как она реализована в Java
 Chetter Hummin22 мая 2012 г., 12:50
Пожалуйста, попробуйте следующее:javamex.com/tutorials/techniques/recursion_how.shtml

Ответы на вопрос(2)

етров, локальных переменных и адреса возврата, это пространство называется записью активации (стековый фрейм).

Рекурсия вызывает метод, имя которого совпадает с именем вызывающего, следовательноa recursive call is not litterally a method calling it self but an instantiation of a method calling another instantiation of the same original, эти вызовы внутренне представлены различными записями активации это означает, что они дифференцированы системой.

Решение Вопроса

чем в других (обязательных) языках.

Там & APOS; sстек который содержит кадр стека для каждого вызова метода. Этот стекстек вызовов (или просто «стек», когда контекст проясняет, что имеется в виду). Элемент в стеке называется «кадрами стека».

Кадр стека содержит переданные аргументы метода и локальные переменные вызова метода (и, возможно, некоторые другие данные, такие как адрес возврата).

Когда метод вызывает себя (или, на самом деле,any метод), затем создается новый кадр стека для параметров и локальных переменных вновь вызванного метода.

Во время выполнения метода код можетonly получить доступ к значениям вcurrent (т. е. самый верхний) кадр стека.

Таким образом, одна (локальная) переменная может иметь много разных значений одновременно.

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

 22 мая 2012 г., 13:19
Я собирался сказать «За исключением оптимизации рекурсии хвостового вызова». но очевидно, что виртуальная машина Java все еще не поддерживает ее.stackoverflow.com/questions/3616483/…
 22 мая 2012 г., 13:21
@MichaelAnderson: просто говоря, оптимизация хвостовой рекурсии - это "просто" повторное использование текущего фрейма стека, когда компилятор / среда выполнения понимают, что он больше не нужен, за исключением адреса возврата. Это принципиально не меняет способ работы стека (и рекурсии).

Ваш ответ на вопрос