«tail-call» 태그된 질문

8
재귀 알고리즘에서 스택 오버플로를 피하기 위해 어떤 방법이 있습니까?
질문 재귀 알고리즘으로 인한 스택 오버플로를 해결하는 가능한 방법은 무엇입니까? 예 Project Euler 문제 14 를 해결 하려고 시도하고 재귀 알고리즘으로 시도하기로 결정했습니다. 그러나 프로그램은 java.lang.StackOverflowError와 함께 중지됩니다. 알겠습니다 매우 큰 수의 Collatz 시퀀스를 생성하려고 시도했기 때문에 알고리즘이 실제로 스택을 오버플로했습니다. 솔루션 그래서 궁금합니다. 재귀 알고리즘이 올바르게 작성되었다고 가정하고 스택 …

4
JVM이 테일 콜 최적화에 부과하는 제한 사항
Clojure는 자체적으로 테일 콜 최적화를 수행하지 않습니다. 테일 재귀 함수가 있고이를 최적화하려면 특수 양식을 사용해야합니다 recur. 마찬가지로 두 개의 상호 재귀 함수가있는 경우을 사용해서 만 최적화 할 수 있습니다 trampoline. Scala 컴파일러는 재귀 함수에 대해서는 TCO를 수행 할 수 있지만 두 개의 상호 재귀 함수에는 사용할 수 없습니다. 이러한 제한 …
36 scala  clojure  jvm  tail-call 

2
Y 조합기 및 테일 콜 최적화
F #에서 Y 결합기의 정의는 다음과 같습니다. let rec y f x = f (y f) x f는 재귀적인 하위 문제에 대한 지속성을 첫 번째 논증으로 기대합니다. yf를 연속으로 사용하면 개발할 수있는 f가 연속 호출에 적용됩니다. let y f x = f (y f) x = f (f (y f)) …

3
스택을 사용하여 함수 호출 의미를 나타내는 대안은 무엇입니까?
우리는 함수 호출이 일반적으로 스택을 사용하여 구현된다는 것을 알고 사랑합니다. 프레임, 리턴 주소, 매개 변수, 전체 로트가 있습니다. 그러나 스택은 구현 세부 사항입니다. 호출 규칙은 다른 작업을 수행 할 수 있습니다 (예 : x86 빠른 호출은 (일부) 레지스터를 사용하고, MIPS 및 팔로어는 레지스터 창을 사용하는 등), 최적화는 다른 작업 (인라인, …

4
TCO가 없을 때 스택을 날릴 염려가 언제 있습니까?
JVM을 대상으로하는 새로운 프로그래밍 언어에 대한 토론이있을 때마다 필연적으로 다음과 같은 사람들이 있습니다. "JVM은 테일 콜 최적화를 지원하지 않으므로 많은 폭발 스택을 예측합니다." 그 주제에는 수천 가지 변형이 있습니다. 이제 Clojure와 같은 일부 언어에는 사용할 수 있는 특별한 재귀 구문이 있음을 알고 있습니다. 내가 이해하지 못하는 것은 테일 콜 최적화가 …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.