Heim  >  Artikel  >  Web-Frontend  >  Lustige JavaScript-Frage: Fibonacci-Sequenzgenerator

Lustige JavaScript-Frage: Fibonacci-Sequenzgenerator

黄舟
黄舟Original
2017-01-22 14:54:311627Durchsuche

Erstellen Sie einen Funktionsgenerator genfib(), der bei jeder Ausführung dieser Funktion das nächste Element in der Fibonacci-Sequenz zurückgibt. Das erste Element 0 wird bei der ersten Ausführung zurückgegeben.

Das Beispiel ist wie folgt:

var fib = genfib();  
fib(); // -> returns 0  
fib(); // -> returns 1  
fib(); // -> returns 1  
fib(); // -> returns 2

Als ich diese Frage bekam, war mein erster Gedanke, in genfib() Aufsehen zu erregen, weil es eine Funktion zurückgibt, also kehre ich zuerst zurück eine Funktion darin. Egal was drin ist.

Dann definieren wir entsprechend der Bedeutung der Frage eine interne Funktion in genfib(), um den N-ten Term der Fibonacci-Folge zu finden. Hier verwende ich die Divide-and-Conquer-Rekursion.

Wie kombinieren Sie also die Abschlussfunktion und diese private Funktion, um den Effekt zu erzielen, dass bei jeder Ausführung die nächste Fibonacci-Folge zurückgegeben wird?

Sie können eine interne Zeigervariable point verwenden, die auf 0 zeigt. Bei jedem Aufruf der Abschlussfunktion führen wir die private Funktion aus, übergeben die Zeigervariable als Parameter und geben den Fibonacci des Stroms zurück Elementnummer, und dann wird die Zeigervariable erhöht.

Damit ist das Ziel erreicht.

function genfib(){  
    var point = 0;  
      
    var getFib = function(num){  
        if(num == 0){  
            return 0;  
        }  
        if(num == 1){  
            return 1;  
        }  
        return getFib(num-1) + getFib(num-2);  
    };  
      
    return function fib(){  
        return getFib(point++);  
    }  
}

Das Obige ist der Inhalt von JavaScript Fun Question: Fibonacci Sequence Generator. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn