Maison > interface Web > js tutoriel > le corps du texte

Question amusante JavaScript : générateur de séquence de Fibonacci

黄舟
Libérer: 2017-01-22 14:54:31
original
1684 Les gens l'ont consulté

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
Copier après la connexion

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++);  
    }  
}
Copier après la connexion

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) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal