Я новичок в ruby, поэтому, возможно, здесь я делаю очень новичок, но попробовал поискать в Google и не смог выяснить причину, по которой этот код демонстрирует странное поведение.Этот код очень прост и использует базовое динамическое программирование для хранения промежуточного результата в Hash, поэтому он используется позже для ускорения вычислений.
$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
Я ожидаю, что этот код выведет 3, так как это делает вызовк fib (1) и fib (0), которые возвращают 2 и 1 соответственно, а затем добавляются к 3. Но результат равен 1 и 2.