재귀는 Java에서 어떻게 구현됩니까? 내 질문은 Java에서 재귀 메서드가 실행될 때 어떤 일이 발생하는지에 관한 것입니다. 나는 그것이 스택을 사용한다는 것을 모호하게 이해하지만 예제와 함께 명확한 설명을 찾고있다.Java에서 재귀를 구현하는 방법
답변
재귀는 Java에서 다른 (명령형) 언어와 다르게 처리되지 않습니다.
모든 메소드 호출에 대해 스택 프레임을 보유하는 a stack이 있습니다. 해당 스택은 call stack입니다 (또는 의미가 의미가 명확한 경우 단순히 "스택"이라고 함). 스택의 요소를 "스택 프레임"이라고합니다.
스택 프레임은 전달 된 메소드 인수와 메소드 호출의 로컬 변수 (그리고 리턴 주소와 같은 다른 데이터)를 보유합니다.
메서드가 자체적으로 (또는 사실 메서드를 호출 할 때) 메서드를 호출하면 새로 호출되는 메서드의 매개 변수와 로컬 변수에 대해 새 스택 프레임이 만들어집니다. 메소드 실행 중에
코드 수있는 전류 (즉, 최상위) 스택 프레임에 액세스 만 값.이렇게하면 단일 (로컬) 변수가 동시에 많은 값을 가질 수 있습니다.
재귀는 일반적인 메서드 호출과 다른 방법으로 처리되지 않습니다. 단, 여러 스택 프레임은 같은 메서드 호출을 동시에 나타낼뿐입니다.
"꼬리 호출 재귀 최적화를 제외하고"라고 말할 것입니다. 하지만 분명히 Java VM은 아직 지원하지 않습니다. http://stackoverflow.com/questions/3616483/why-does-the-jvm-still-not-support-tail-call-optimization –
@MichaelAnderson : 간단히 말하자면 꼬리 재귀 최적화는 단순히 현재 스택을 다시 사용하는 것입니다 프레임은 컴파일러/런타임이 반환 주소를 제외하고는 더 이상 필요 없다는 것을 알 때 사용합니다. 스택 (및 재귀) 작동 방식을 근본적으로 변경하지 않습니다. –
메서드가 호출 된 경우 매개 변수, 로컬 변수 및 반환 주소를 유지할 공간이 필요한 경우이 공간을 활성화 레코드 (스택 프레임)라고합니다.
재귀 재귀 호출은 litterally 때문에 , 그것은 자기 만 같은 원래의 또 다른 인스턴스를 호출하는 방법의 인스턴스를 호출하는 방법을 호출자와 같은 이름을 가지고 발생하는 방법을하지 않는 부르고있다. 이러한 호출은 시스템에 의해 구별되는 다른 활성화 레코드 에 의해 내부적으로 표현됩니다.
- 1. Java에서 재귀를 사용하여 배열에서 제거하는 방법
- 2. Java에서 게이트웨이를 구현하는 방법
- 3. Java에서 GDate를 구현하는 방법
- 4. XSL에서 재귀를 구현하는 방법은 무엇입니까?
- 5. Java에서 "Duotone"효과를 구현하는 방법
- 6. Java에서 Hough Circle을 구현하는 방법
- 7. Java에서 광학 항목을 구현하는 방법
- 8. Java에서 클러스터 그래프를 구현하는 방법
- 9. Java에서 단위 변환기를 구현하는 방법
- 10. Java에서 스레드와 재귀를 사용하여 피보나치 수를 계산하십시오.
- 11. Java에서 클래스 필드를 사용하지 않고 재귀를 작성하는 방법
- 12. Java에서 검색 엔진 프로젝트를 구현하는 방법
- 13. Java에서 다중 스레드 풀을 구현하는 방법
- 14. Java에서 인쇄 미리보기 기능을 구현하는 방법
- 15. Java에서 컴퓨터 고 보드를 구현하는 간단한 방법
- 16. Java에서 C와 유사한 파서를 구현하는 방법
- 17. Java에서 오류 케이스에 대해 'finally'를 구현하는 방법
- 18. 무한 재귀를 방지하는 방법
- 19. cakephp에서 재귀를 제한하는 방법
- 20. Java에서 TreeSet을 구현하는 방법은 무엇입니까?
- 21. OCJP - Java에서 printf를 구현하는 경우
- 22. Java에서 before_filter와 비슷한 접근법을 구현하는 방법은 무엇입니까?
- 23. try/catch 논리를 사용하여 java에서 fibonacci 시퀀스를 구현하는 방법은 무엇입니까?
- 24. 재귀를 피하십시오.
- 25. Play 2.0을 사용하여 Java에서 PayPal IPN 컨트롤러를 구현하는 방법
- 26. Java에서 RSA 암호화 및 암호 해독을 구현하는 방법
- 27. Grails에서 javascript의 'escape'기능을 구현하는 방법
- 28. 자바에서 검거 기능을 구현하는 방법
- 29. 자바에서 파일 필터를 구현하는 방법
- 30. Java에서 세션 압축을 구현하는 방법은 무엇입니까?
는 다음을 시도하십시오 http://www.javamex.com/tutorials/techniques/recursion_how.shtml –
그는 "스택"하지 스택) –
@AmitBhargava 링크가 재귀가 무엇인지 설명하고,하지만 난 찾고 있어요 그것이 Java로 구현되는 방법 – 18bytes