私はルビーに慣れていないので、おそらくここで非常に初心者の間違いを犯していますが、答えを得るためにグーグルを試してみましたが、このコードが奇妙な動作をしている理由を理解できませんでした. このコードは非常に単純で、基本的な動的プログラミングを使用して中間結果をハッシュに格納し、後で計算を高速化するために使用します。
$existingSequence = {0 => 1, 1 => 2}
def fib(n)
if $existingSequence.has_key? n
return $existingSequence.values_at n;
end
if n == 0
return 1;
elsif n == 1
return 2;
end
$existingSequence[n] = fib(n - 1) + fib(n - 2)
return $existingSequence[n];
end
n = fib(2)
puts n
このコードは fib(1) と fib(0) を呼び出し、それぞれ 2 と 1 を返し、追加して 3 になるため、このコードは 3 を出力すると予想しています。しかし、出力は 1 と 2 です。