«tail-recursion» 태그된 질문

꼬리 재귀는 함수가 일정량의 작업을 수행 한 다음 자체를 호출하는 재귀 전략입니다. "꼬리"는 재귀가 함수의 맨 끝에 있다는 사실을 나타냅니다. 특히 기능적인 많은 프로그래밍 언어 컴파일러는 이러한 유형의 호출을 반복으로 전환 할 수 있습니다. 즉, 호출 수에 관계없이 스택 오버플로에 대한 두려움없이 지원되는 언어의 테일 재귀를 사용할 수 있습니다.



19
스칼라에서 루프를 끊으려면 어떻게해야합니까?
루프를 해제하려면 어떻게해야합니까? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else if(product.toString.equals(product.toString.reverse)) largest=largest max product } } 중첩 된 for 루프를 꼬리 재귀로 어떻게 전환합니까? FOSDEM 2009 http://www.slideshare.net/Odersky/fosdem-2009-1013261의 Scala Talk에서 22 …

20
재귀 이해하기
현재로서는이 질문이 Q & A 형식에 적합하지 않습니다. 답변, 사실, 참고 자료 또는 전문 지식을 통해 답변이 뒷받침 될 것으로 예상되지만이 질문은 토론, 논쟁, 여론 조사 또는 광범위한 토론을 요구할 것입니다. 이 질문을 개선하고 다시 열 수 있다고 생각 되면 도움말 센터 를 방문하여 안내를 받으십시오 . 휴일 칠년 전에 …

6
파이썬은 꼬리 재귀를 최적화합니까?
다음 오류로 실패하는 다음 코드 조각이 있습니다. RuntimeError : 최대 재귀 깊이를 초과했습니다 꼬리 재귀 최적화 (TCO)를 허용하기 위해 이것을 다시 쓰려고했습니다. TCO가 발생하면이 코드가 성공적이었을 것이라고 생각합니다. def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n) print(trisum(1000, 0)) 파이썬이 어떤 유형의 …

5
어떤 경우에 C ++ 컴파일러가 꼬리 재귀 최적화를 수행합니까?
C와 C ++에서 꼬리 재귀 최적화를 수행하는 것이 완벽하게 잘 작동하는 것처럼 보이지만 디버깅하는 동안이 최적화를 나타내는 프레임 스택을 보지 못하는 것 같습니다. 스택은 재귀의 깊이를 알려주기 때문에 좋은 것입니다. 그러나 최적화도 좋습니다. C ++ 컴파일러가이 최적화를 수행합니까? 왜? 왜 안돼? 컴파일러에게 지시하는 방법은 무엇입니까? MSVC의 경우 : /O2또는/Ox GCC의 …

8
꼬리 재귀는 정확히 어떻게 작동합니까?
나는 꼬리 재귀가 어떻게 작동하는지, 그리고 그것과 정상적인 재귀의 차이점을 거의 이해합니다. 나는 단지 그 이유를 이해하지 않습니다 그것의 반환 주소를 기억하기 위해 스택을 필요로한다. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * n); } …

6
.NET / C #이 꼬리 호출 재귀를 최적화하지 않는 이유는 무엇입니까?
어떤 언어가 꼬리 재귀를 최적화하는지에 대한 질문을 찾았습니다 . 가능할 때마다 C #이 꼬리 재귀를 최적화하지 않는 이유는 무엇입니까? 구체적인 경우이 메서드가 루프로 최적화되지 않는 이유는 무엇입니까 ( 중요한 경우 Visual Studio 2008 32 비트) ?: private static void Foo(int i) { if (i == 1000000) return; if (i % …

5
JVM이 테일 호출 최적화를 방지합니까?
다음 질문에 대한 인용문을 보았습니다 . 웹 서비스를 구축 할 좋은 기능적 언어는 무엇입니까? 특히 Scala는 수행 할 수있는 구성의 종류를 제한하는 자체 재귀 함수를 제외하고는 꼬리 호출 제거를 지원하지 않습니다 (이는 JVM의 근본적인 제한 사항입니다). 이것이 사실입니까? 그렇다면 이러한 근본적인 한계를 만드는 JVM은 무엇입니까?

5
Ruby는 Tail Call 최적화를 수행합니까?
기능적 언어는 재귀를 사용하여 많은 문제를 해결하기 때문에 많은 문제가 TCO (Tail Call Optimization)를 수행합니다. TCO는 해당 함수의 마지막 단계 인 다른 함수 (또는 자체적으로이 기능을 TCO의 하위 집합 인 Tail Recursion Elimination이라고도 함)에서 함수를 호출하여 새 스택 프레임이 필요하지 않게합니다. 오버 헤드와 메모리 사용량을 줄입니다. Ruby는 분명히 기능적 언어 …


4
Haskell에 꼬리 재귀 최적화 기능이 있습니까?
저는 오늘 유닉스에서 "time"명령을 발견했고, Haskell에서 tail-recursive와 normal recursive 함수 사이의 런타임 차이를 확인하는 데 사용할 것이라고 생각했습니다. 다음 기능을 작성했습니다. --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1 y = y fac' x y = fac' (x-1) (x*y) …

1
Scala Cats / fs2에서 스택 안전에 대해 추론하는 방법은 무엇입니까?
다음은 fs2 설명서의 일부 코드입니다 . 이 함수 go는 재귀 적입니다. 문제는 스택 안전인지 어떻게 알 수 있으며 어떤 함수가 스택 안전인지 판단하는 방법입니다. import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n: Long): Pull[F,O,Unit] = { s.pull.uncons.flatMap { case Some((hd,tl)) => hd.size match …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.