Créez un générateur de fonctions genfib(), qui peut renvoyer une fonction à chaque fois que cette fonction est exécutée, elle renvoie l'élément suivant de la séquence de Fibonacci. Le premier élément 0 est renvoyé lors de sa première exécution.
L'exemple est le suivant :
var fib = genfib(); fib(); // -> returns 0 fib(); // -> returns 1 fib(); // -> returns 1 fib(); // -> returns 2
Quand j'ai reçu cette question, ma première pensée a été de faire des histoires dans genfib(), car elle renvoie une fonction, donc je retourne d'abord une fonction dedans. Fonction de fermeture, peu importe ce qu’il contient.
Ensuite, selon le sens de la question, on définit une fonction interne dans genfib() pour trouver le Nième terme de la séquence de Fibonacci. J'utilise ici la récursivité diviser pour régner.
Alors, comment combiner la fonction de fermeture et cette fonction privée pour obtenir l'effet de renvoyer la prochaine séquence de Fibonacci à chaque fois qu'elle est exécutée ?
Vous pouvez utiliser un point de variable de pointeur interne, qui commence à pointer vers 0. Chaque fois que la fonction de fermeture est appelée, nous exécutons la fonction privée, passons la variable de pointeur en paramètre et renvoyons le Fibonacci du numéro d’élément actuel, puis la variable de pointeur est incrémentée.
Cela atteint l'objectif.
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++); } }
Ce qui précède est le contenu de la question amusante JavaScript : générateur de séquence de Fibonacci. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !