J'ai trouvé deux solutions différentes sur StackOverflow pour calculer un nombre de Fibonacci. On utilise un lambda
, comme ceci:Pourquoi la récursivité de hachage est-elle plus rapide que la récursivité lambda?
f = ->(x){ x < 2 ? x : f[x-1] + f[x-2] }
f[6] # => 8
L'autre utilise un Hash
:
f = Hash.new{ |h,k| h[k] = k < 2 ? k : h[k-1] + h[k-2] }
f[6] # => 8
La version Hash
est plus rapide que la version lambda
.
Benchmark.bm do |x|
x.report { f[35] }
x.report { fibonacci[35] }
end
user system total real
7.332000 0.000000 7.332000 (7.349421)
0.000000 0.000000 0.000000 (0.000000)
La version lambda
ne peut pas calculer même f[100]
dans un laps de temps raisonnable, alors que la version Hash
peut calculer fibonacci[1000]
en moins d'une microseconde. Pourquoi la version Hash
est-elle plus rapide?
Quelle version de Ruby avez-vous utilisé pour votre test de performance? –
@tlewin Ma version Ruby est 1.9.3 – fbonetti