Absolument lent (car il se reproduit jusqu'à ce que n atteigne une profondeur de 0 ou 1).
def fib(n)
return n if n == 0 || n == 1
return fib(n - 1) + fib(n - 2)
end
C'est récursif, mais ce que vous faites n'est pas très différent d'une instruction for. C'est juste une fonction récursive, donc si un super grand n est passé, la pile peut déborder.
def fib(n, a, b)
return a if n == 0
return fib(n - 1, b, a + b)
end
Puisqu'il n'est pas récursif, le débordement de pile ne se produira pas ... Vous pouvez écrire magnifiquement en utilisant l'affectation fractionnée. Ceci est une mission partagée.
def fib(n)
a, b = 0, 1
n.times.each { a, b = b, a + b }
a
end
TODO Veuillez écrire à quelqu'un.
Recommended Posts