Absolut langsam (weil es wiederholt wird, bis n eine Tiefe von 0 oder 1 erreicht).
def fib(n)
return n if n == 0 || n == 1
return fib(n - 1) + fib(n - 2)
end
Es ist rekursiv, aber was Sie tun, unterscheidet sich nicht wesentlich von einer for-Anweisung. Es ist nur eine rekursive Funktion. Wenn also ein super großes n übergeben wird, kann der Stapel überlaufen.
def fib(n, a, b)
return a if n == 0
return fib(n - 1, b, a + b)
end
Da es nicht rekursiv ist, tritt kein Stapelüberlauf auf ... Sie können schön schreiben, indem Sie die geteilte Zuordnung verwenden. Dies ist eine geteilte Zuordnung.
def fib(n)
a, b = 0, 1
n.times.each { a, b = b, a + b }
a
end
TODO Bitte schreiben Sie jemanden.
Recommended Posts