0에서 n까지 n의 합계를 계산하는 Java 재귀 적 메서드를 작성했습니다. 코드는 다음과 같습니다.재귀 적 합계 스택 오버플로
private static long sum (long n) {
if (n == 0) {
return 0;
} else {
return n + sum(n-1);
}
}
11000과 같은 큰 수를 전달하면 스택 오버플로가 가끔 발생합니다. 네, 가끔 말했죠. n이 11000보다 크거나 같으면 프로그램이 실행되고 응답 또는 스택 오버플로를 제공합니다.
아무도 무슨 일이 일어 났는지 설명 할 수 있습니까?
관련 항목 : [Java 호출 스택의 최대 깊이는 무엇입니까?] (http://stackoverflow.com/questions/4734108/what-is-the-maximum-depth-of-the-java-call-stack) –
대신 [For- 루프] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)를 사용해보십시오. –
@AlanTuning 대신'n * (n + 1)/2' 사용을 고려하십시오 :) –