Ich versuche, eine Funktion in Scala, die ein Integer-Argument dauert und gibt die Addition der Fibonacci-Zahlen bis zum angegebenen fib zurück. Nummer. Ich benutze einen Stream, um die fib zu bekommen. Zahlen, dann nach rechts falten, um sie hinzuzufügen. Warum erzeugt dies einen Stapelüberlauf und wie kann ich ihn beheben?Scala: falten auf Stream von Fibonacci Zahlen
def fibonacci(n: Int): Long = {
lazy val f: Stream[Int] = 0 #:: 1 #:: (f.zip(f.tail)).map{t=>t._1 + t._2}.filter(_<=n)
f.foldRight(0)(_+_).toLong
}
beispielsweise 5 eintritt, würde ich erwarten, 0 + 1 + 1 + 2 + 3 + 5 =
Offensichtlich haben Sie sich eine Rekursion, die nie beendet wurde. – noru
Der prägnanteste Fibonacci-Stream, dem ich begegnet bin: 'def fib: Stream [Int] = 0 # :: fib.scan (1) (_ + _)' – jwvh