자바에서 재귀 호출 Ackermann에 대한 연구를하고 있습니다. 나는 5 월 재귀 줄에서 오류를 얻고있다Java 재귀 학습, Ackerman 함수
return Ack(m - 1, Ack(m, n - 1));
사람이 무엇이 잘못을 지적 할 수 있다면 너무 감사합니다 (23). 당신은 최대 재귀 깊이를 초과했습니다
/*enter code here
Ackerman's function, A(m, n) is defined:
A(0 , n) = n + 1 for n >= 0
A(m , 0) = A(m – 1 , 1) for m > 0
A(m , n) = A(m – 1 , A(m , n - 1)) for n >= 0
*/
public class AckFun {
public static int Ack(int m, int n) {
if (m == 0) {
return 2 * n;
} else if (m >= 1) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 2;
} else {
return Ack(m - 1, Ack(m, n - 1));
}
}
return n; // Not sure what to return here, Eclipse suggested this.
}
public static void main(String args[]) {
System.out.println(Ack(3, 4));
}
}
Eclipse에 "return n"이 필요한 이유는 그렇지 않으면 섹션을 반환하지 않기 때문입니다. 귀하의 방법은 다음 형식의 양식입니다. if (a) else if (b) ... 그러나 a 또는 b가 true가 아닌 경우 두 블록 중 하나가 종료됩니다. –
나는 그것을 좋아한다 ** java.lang.StackOverflowError ** – beggs
웹 사이트가 마음에 드십니까? – Benzle