모든 재귀는 스택 구조를 가진 반복 함수로 수정 될 수 있습니다. 그렇다면 왜 그렇게하고 싶습니까? 대답은 stackoverflow를 피하기위한 것이고, 컴퓨터가 재귀를 통해 어떻게 오버플로 될 수 있습니까? 왜 컴파일러가 자동으로 힙의 스택에 재귀 함수를 자동으로 추가합니까? 아니면 추가 키워드를 사용합니까? 나는 또한 힙이 제한적이라는 것을 알고 있지만, 프로그램에 할당 된 스택보다 훨씬 큽니다.재귀에 의한 stackoverflow를 해결할 수없는 이유는 무엇입니까?
답변
활성화 레코드는 실제로 힙 할당이 가능하지만 일반적으로 너무 비싸다고 생각됩니다. 그럼에도 불구하고 스택 방식의 Python과 SML/NJ와 같은 몇 가지 구현 방법이 있습니다.
이러한 경우 동기 부여는 스택 오버플로를 "수정"하지 않고 지속성 구현을 돕는 것일 수 있습니다.
C/C++ maximum stack size of program 및 MSDN에 따르면 Windows에서 최대 스택 크기는 1 MiB입니다. 귀하의 질문은 흥미 롭습니다. 키워드는 확실히 가능할 것이고 컴파일러는 그것을 할 수있을 것입니다. 당신은 컴파일러 제작자에게 그것에 대해 물어볼 필요가 있습니다. 그러나 그것은 매우 흥미로운 특징은 아닙니다.
힙의 스택 및 재귀 장부 변수에 다른 로컬 변수가 있으므로 캐싱이 어려울 수 있습니다. 정보는 메모리에 흩어져 있습니다.
일부 재귀 알고리즘은 실제로는 반복적 인 알고리즘 (예 : Factorial) 또는 닫힌 형식의 표현식 (예 : Fibonacci numbers 참조)으로 바뀔 수 있습니다. 그러면 재귀 호출의 장부 보관은 필요 없습니다.
DEFAULT 최대 스택은 1입니다. (그리고 VS! = windows) –
반복 프로세스에서는 재귀 상태를 직접 추적합니다.
매우 효율적인 절차를 통해 컴파일러가 매우 일반적인 절차 메커니즘 (효율이 모든 종류의 ABI 관심사로 인해 방해받을 수 있음)을 사용하는 것이 가능할 수 있습니다.
모든 시스템이 고정 스택 또는 선형 주소 공간을 사용하지 않기 때문에 모든 시스템에서 스택 검사가 가능하지만 쉽지는 않습니다. 또한 각 재귀에 검사가 추가되므로 오버 헤드가 있습니다.
- 1. 재귀에 의한 스도쿠 해결
- 2. 재귀에 의한 스도쿠 (Sudoku) 재귀에 의한 바운드 에러 - Java
- 3. WindsorContainer가 IWindsorContainer를 해결할 수없는 이유는 무엇입니까?
- 4. eclipse가 com.google.android.gms.location.ActivityRecognitionClient를 해결할 수없는 이유는 무엇입니까?
- 5. 아이비가 내 구성을 해결할 수없는 이유는 무엇입니까?
- 6. START_STICKY를 (를) 변수로 해결할 수없는 이유는 무엇입니까?
- 7. 내 레이아웃을 해결할 수없는 이유는 무엇입니까? (안드로이드/자바)
- 8. IntelliJ IDEA (12.1.6)가 BorderFactory.createLineBorder (...)를 해결할 수없는 이유는 무엇입니까?
- 9. 최대 절전 모드 STRING을 (를) 해결할 수없는 이유는 무엇입니까?
- 10. gms 및 com.google.example 가져 오기를 해결할 수없는 이유는 무엇입니까?
- 11. Android Studio에서 "import com.google.android.gms.location.LocationRequest;"를 해결할 수없는 이유는 무엇입니까?
- 12. IntelliJ IDEA가 destroyMethod = "close"를 해결할 수없는 이유는 무엇입니까?
- 13. 시퀀스를 단순히 정렬하여 Longest increasing subsequence를 해결할 수없는 이유는 무엇입니까?
- 14. Maven에서 Spring @Bean @Configuration 등의 주석을 해결할 수없는 이유는 무엇입니까?
- 15. 해결할 수없는 JApplet 오류
- 16. 해결할 수없는 펄 오류?
- 17. 수입 com.google.android.gms.maps는 해결할 수없는
- 18. 해결할 수없는 오류 메시지
- 19. QCAR를 해결할 수없는
- 20. 해결할 수없는 부모 POM
- 21. 스위프트 - 해결할 수없는 오류
- 22. 해결할 수없는 호스트를 말리시겠습니까?
- 23. 연결 변수가 해결할 수없는
- 24. 몽고의 카스바는 : 해결할 수없는 "++"
- 25. TextWatcher afterTextChanged는 android에서 stackoverflow를 야기합니다.
- 26. "알 수없는 이유는 무엇입니까?
- 27. 엿볼 수없는 이유는 무엇입니까?
- 28. 재귀에 어떻게 접근해야합니까?
- 29. 내가 재귀에 새로운 오전
- 30. stackoverflow를 피하는 방법 == 오버로드
힙도 무한하지 않습니다 ... –
[꼬리 재귀 함수] (http://stackoverflow.com/questions/33923/what-is-tail-recursion/33928#33928)는 다음과 같이 다시 쓸 수 있습니다. 반복 함수이지만 많은 재귀 함수는 꼬리 재귀가 아닙니다. – Simon
모든 프로세스는 운영 체제 데이터 구조에 2GB가 할당 된 32 비트 컴퓨터에서 4GB의 가상 메모리를 확보했습니다. 따라서 스택의 크기가 제한되어 오버플로가 발생할 수 있습니다. –