n=1000 より前にスタック オーバーフローが発生します。JVM がすべてのスタック フレームを保持する必要があると感じているのは long[] パラメータへの参照のためですか (ワイルド 推測)、それとも何か間違ったことをしているのですか?
public static void main(String[] args) {
long start = System.currentTimeMillis();
fibonacciMemoized(1000);
long end = System.currentTimeMillis();
System.out.println("\nTotal run time: " + (end-start));
}
public static void fibonacciMemoized(int n) {
long[] fibMemos = new long[n+1];
for (int i = 0; i < fibMemos.length; i++) {
fibMemos[i] = Long.MAX_VALUE;
}
long fibResult = fib(n, 1, 0, fibMemos);
System.out.println(fibResult);
}
public static long fib(int n, long fibAcc, long fibPrev, long[] fibMemos) {
if (fibMemos[n] != Long.MAX_VALUE){
return fibMemos[n];
} else if (n == 0) {
return fibPrev;
} else if (n == 1){
return fibAcc;
} else {
long result = fib(n-1, fibAcc+fibPrev, fibAcc, fibMemos);
fibMemos[n] = result;
return result;
}
}