함수 호출은 스택 데이터 구조를 통해 처리됩니다. 재귀를 지원하기에 충분합니까?컴파일러를 설계 할 때 처리 재귀를 처리해야합니까?
2
A
답변
5
스택이 모두 인 경우는입니다. 재귀를 지원할 때는 컴파일러에서 특수 처리해야합니다.
이전 버전의 FORTRAN과 같은 이전 프로그래밍 언어에서는 런타임 환경에 함수 스택이 없으며 각 함수에는 메모리의 어딘가에 하나의 활성화 레코드가 예약되어있었습니다. 즉 재귀가 가능한 것은 아닙니다. 재귀 적으로 함수를 호출하면 활성화 레코드 하나를 덮어 쓰게되고 거기에 도착한 컨텍스트를 잃어 버리기 때문입니다.
함수 스택의 도입은 프로그래밍 언어에서 실제로 표현되는 재귀를 처음으로 활성화 한 것입니다. 그 전에 프로그래머는 재귀를 추상적으로 문제를 해결하는 도구로 사용하지만 호출 스택이 없기 때문에 반복적 인 논리로 코드를 변환해야합니다.
프로그래밍 언어가 재귀를 지원하려면 호출 스택을 동적으로 유지 관리하기위한 메커니즘이 필요합니다. 이는 명시 적 스택을 거칠 필요는 없습니다. 이론적으로 모든 스택 프레임을 동적으로 할당하고 링크 된 목록으로 함께 연결할 수 있습니다. 예를 들어 코 루틴이나 클로저를 지원하고 나중에 함수를 반환 한 후에 데이터를 나중에 저장할 수 있도록 이전 활성화 레코드를 유지해야하는 경우 유용합니다.
희망이 도움이됩니다.
관련 문제
- 1. 컬렉션을 처리 할 때 예외는 어떻게 처리해야합니까?
- 2. PHP가 재귀를 처리 할 수있는 능력
- 3. 어떻게 컴파일러를 설계 할 때 어셈블리 코드를 통합 할 수 있습니까?
- 4. 함수에서 무한 재귀를 할 때 문제가 발생했습니다.
- 5. 왜 재귀 - 하강 파서가 왼쪽 재귀를 처리 할 수 없는가?
- 6. Object-C의 하위 클래스를 처리 할 때 클래스 메서드 처리
- 7. 라이센스 처리 통합을위한 설계 선택
- 8. 큰 이미지를 처리 할 때 Blackberry - OutOfMemory
- 9. WPF 용으로 설계 할 때 Adobe Illustrator에서 선호하는 dpi는 무엇입니까?
- 10. 메시지 기반 처리 시스템 설계
- 11. Java MUD에서 지속성을 어떻게 처리해야합니까? OptimisticLockException 처리
- 12. SSL_read()가 실행될 때 SSL_ERROR_WANT_WRITE를 처리해야합니까?
- 13. ObjectDisposedException 처리 할 수없는 양식을 .Show()로 처리 할 때
- 14. ksh93에서 재귀를 사용할 때 이상한 동작이 발생했습니다.
- 15. debian에서 크로스 컴파일러를 컴파일 할 때 오류가 발생했습니다.
- 16. 스레딩과 재귀를 함께 사용해야합니까?
- 17. G ++ 컴파일러는 재귀를 허용하지 않습니까?
- 18. 데이터베이스를 설계 할 때 유의해야 할 중요한 사항은 무엇입니까?
- 19. OpenID로 로그인 할 때 URL에서 앰퍼샌드를 이스케이프 처리해야합니까?
- 20. 재귀를 사용할 때 C# com 항목 마샬링
- 21. 주입 된 물성을 처리해야합니까?
- 22. 재귀를 피하십시오.
- 23. 재귀를 사용하여 정렬
- 24. 대규모 서버 프로그램을 설계 할 때 가장 일반적인 방법은 무엇입니까?
- 25. 사용자가 삭제 될 때 항목을 어떻게 처리해야합니까?
- 26. 전자 메일을 보낼 때 문자를 이스케이프 처리해야합니까?
- 27. IsChanged 기능은 어디에 처리해야합니까?
- 28. dsolefile는 - 오류 처리 할 때 값이
- 29. 컬렉션을 처리 할 때 올바른 속성 사용
- 30. 변수 범위는 이벤트 핸들러를 처리 할 때
많은 도움이됩니다. 감사! – Halaby