검사 :왜이 꼬리가 재귀입니까? 이 스칼라 코드 밖으로
이def rec(n: Int) {
if (n > 1) {
val d = n/2
rec(d)
// if (d > 1) // abort loop
rec(n/d)
}
}
이 코드는 무한 루프가 발생합니다. 꼬리 재귀 최적화 때문에 StackOverflowError를 얻지 못했습니다. 이 방법은 그러므로 나는 꼬리 호출 위치를 이해하지 못하는 자신을 호출하는 루프의 마지막 줄에
public void rec(int n)
{
int d;
for(; n > 1; n /= d)
{
int i = n;
d = i/2;
rec(d);
}
}
: JAD와 디 컴파일
는나는이 자바 코드를 얻었다. 이것을 설명 할 수있는 사람은 누구입니까?
도움이 될 것입니다. 1.http : //www.cs.wayne.edu/~artem/main/teaching/csc3200ss2006/slides/recursion/types.html 2.http : //stackoverflow.com/questions/ 105834/does-the-jvm-prevent-tail-call-optimizations –