私はConcurrentHashMap
とcomputeIfAbsent()
方法で、再帰的にフィボナッチ数を計算するプログラムを書きました:私は8,9,10
のような小さな値を使用するが、値が上昇したときに無限ループに陥ったときにのConcurrentHashMapとフィボナッチ数 - 一貫性のない結果
プログラムは絶対に正常に動作しますそれは永遠に立ち往生されている理由10 to 20
からプログラムが
public class Test {
static Map<Integer, Integer> concurrentMap = new ConcurrentHashMap<>();
public static void main(String[] args) {
System.out.println("Fibonacci result for 20 is" + fibonacci(20));
}
static int fibonacci(int i) {
if (i == 0)
return i;
if (i == 1)
return 1;
return concurrentMap.computeIfAbsent(i, (key) -> {
System.out.println("Value is " + key);
return fibonacci(i - 2) + fibonacci(i - 1);
});
}
}
を停止したことがないいくつかのいずれかを教えてもらえますか?
あなたは以下の説明をしていますが、再帰フィボナッチについて私が言ったことは有効です。あなたが本当に高いシーケンスフィボナッチ数を生成する必要があるならば、ダイナミックプログラミングを使用してください。 –
@ TimBiegeleisen-はい私は..私はちょうど同時ハッシュマップで遊んでいて、これを見つけました... :) –
@TimBiegeleisen OPは動的プログラミングをしていましたが、それほど明白ではありません。フィボナッチ数の各項は、以前に計算されていない場合にのみ計算されます。 preivously計算されていた場合、値は 'concurrentMap'から参照されます –