피보나치 시퀀스에 대한 동적 프로그래밍의 응용을 배우고 있었는데 질문이있었습니다.동적 프로그래밍 피보나치 시퀀스
import java.math.BigInteger;
import java.util.Arrays;
public class FibonacciNumbersB {
static BigInteger[] dp = new BigInteger[10000];
public static void main(String[] args) {
Arrays.fill(dp, BigInteger.ZERO);
dp[0] = BigInteger.ONE;
dp[1] = BigInteger.ONE;
for(int i = 4; i < 9999; i++)
System.out.println(fibRecurse(i).toString());
}
public static BigInteger fibRecurse(int N) {
for(int i = 2; i < N; i++) {
// For numerous calls to this function, this will save as it goes
if(dp[i].equals(BigInteger.ZERO))
dp[i] = dp[i - 1].add(dp[i - 2]);
}
return dp[N - 1];
}
}
(fibRecurse
재귀 아니지만) dp[i]
가 fibRecurse
방법 0
동일한 경우 나는 문 체크가 : 여기에 참조 할 수 있도록 코드입니다.
dp[i]
이 이미 계산되었는지 확인하거나 dp[i]
을 이전 두 요소의 합계와 같게하는 것이 더 효율적입니까?
null을 확인하거나 dp [i]를 다시 계산하는 것이 더 효과적입니까? @ElliottFrisch –
벤치 마크 코드. 하지만 이것은 재귀 알고리즘이 아니므로 메모 작성이 도움이되지 않습니다. –
어쩌면 나는 당신의 질문을 이해하지 못할 수도 있지만, 먼저 값을 확인하는 것이 적어도 재 계산보다는 많은 비용으로 효과적 일 것입니다. 동적 프로그래밍의 핵심은 아닌가? – 121c