Wie behebe ich meinen Fibonacci-Stream in Scala?

8

Ich habe eine Funktion definiert, die den Fibonacci-Stream wie folgt zurückgibt:

%Vor%

Die Funktionen funktionieren in Ordnung, aber es sieht ineffizient aus (siehe die Ausgabe unten)

%Vor%

Es sieht also so aus, als ob die Funktion von Anfang an die n-te Fibonacci-Zahl berechnet. Ist es richtig? Wie würdest du es reparieren?

    
Michael 28.12.2011, 17:23
quelle

2 Antworten

19

Das liegt daran, dass Sie def verwendet haben. Verwenden Sie ein val :

%Vor%

Grundsätzlich ist def eine Methode; In Ihrem Beispiel rufen Sie die Methode jedes Mal auf und jedes Mal, wenn der Methodenaufruf einen neuen Stream erstellt. Die Unterscheidung zwischen def und val wurde bereits vor SO behandelt, daher werde ich hier nicht näher darauf eingehen . Wenn Sie von einem Java-Hintergrund sind, sollte es ziemlich klar sein.

Das ist eine andere nette Sache über Scala; In Java können Methoden rekursiv sein, aber Typen und Werte sind möglicherweise nicht rekursiv. In scala können sowohl Werte als auch Typen rekursiv sein.

    
oxbow_lakes 28.12.2011, 17:40
quelle
14

Sie können es anders machen:

%Vor%     
S. Kucherenko 28.12.2011 18:21
quelle

Tags und Links