동적 프로그래밍 기술을 사용하여 다음 코드를 작성했지만 피보나치 숫자 220을 실행할 때 음수가 표시됩니다.이 프로그램에서 실수가 있습니까?피보나치 숫자가 음수
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Fibonaci {
public static void main(String[] args) {
System.out.println(" number ");
long startTime = System.currentTimeMillis();
HashMap<Integer, Integer> memoized = new HashMap<Integer, Integer>();
int fib = fibonanci(220, memoized);
System.out.println(" Total Time "
+ (System.currentTimeMillis() - startTime));
}
private static int fibonanci(int n, HashMap<Integer, Integer> memoized) {
System.out.println(" n " + n);
if (memoized.containsKey(n)) {
return memoized.get(n);
}
if (n <= 0) {
return 0;
}
if (n <= 2) {
return 1;
} else {
int febonani = fibonanci(n - 1, memoized)
+ fibonanci(n - 2, memoized);
System.out.println(" febonani " + febonani);
if (!memoized.containsKey(n)) {
memoized.put(n, febonani);
}
return febonani;
}
}
}
정말 'HashMap'의 오버 헤드가 아닌'List' (예 :'ArrayList')를 사용하는 것이 좋습니다. –
'''if (! memoized.containsKey (n))'''줄은 불필요한 것으로 보인다. n이 함수의 시작 부분에 memoized 된 데이터 구조에 없다면, 그 시점에서 그 안에 존재하지 않을 것이다. (구조를 변경하는 스레드가 여러 개있는 경우는 제외). –