Вопрос по java – Как рекурсия реализована в Java

0

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

Это «Стек» не складывается;) Ozair Kafray
@AmitBhargava Ссылка объясняет, что такое рекурсия, но я ищу, как она реализована в Java 18bytes
Пожалуйста, попробуйте следующее:javamex.com/tutorials/techniques/recursion_how.shtml Chetter Hummin

Ваш Ответ

2   ответа
11

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

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

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

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

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

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

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

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

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

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

Похожие вопросы