Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation des fonctions récursives en JavaScript

Explication détaillée de l'utilisation des fonctions récursives en JavaScript

黄舟
黄舟original
2017-11-18 10:50:442265parcourir

Dans notre article précédent, nous avons analysé la fonction récursive en JavaScript Je pense que vous avez une certaine compréhension de cela, voici donc les fonctions récursives en JavaScript Comment l'utiliser ? Aujourd'hui, je vais vous faire une introduction détaillée à l'utilisation des fonctions récursives en JavaScript !

La fonction dite récursive consiste à appeler cette fonction dans le corps de la fonction. Soyez prudent lorsque vous utilisez des fonctions récursives. Si elles ne sont pas gérées correctement, vous entrerez dans une boucle infinie. Les fonctions récursives ne sont utilisées que dans des situations spécifiques, telles que des problèmes factoriels

Essayons de créer une factorielle dans les 10 :

[Ctrl+A Tout sélectionner Remarque : si vous devez introduire des besoins Js externes à rafraîchir avant de pouvoir être exécuté]

C'est tout pour appeler des fonctions récursives

La méthode d'assurance lorsque les fonctions récursives js s'appellent elles-mêmes.
Depuis la programmation avancée js
Une fonction récursive factorielle typique :

Le code est le suivant :

function fact(num){ 
if (num<=1){ return 1; 
}else{ 
return num*fact(num-1); 
} 
}

Le code suivant peut provoquer une erreur :

var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //出错

Comme le fait n'est plus une fonction, une erreur s'est produite.
Le problème peut être résolu avec arguments.callee, qui est un pointeur vers la fonction en cours d'exécution.
La nouvelle fonction est :

Le code est le suivant :

function fact(num){ 
if (num<=1){ 
return 1; 
}else{ 
return num*arguments.callee(num-1); //此处更改了。 
} 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //结果为24.

Amélioration de la récursion ordinaire JS

La fonction récursive est passé dans une fonction Elle se forme lorsque le nom s'appelle, comme indiqué ci-dessous :

Le code est le suivant :

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * factorial(num-1); 
} 
}

C'est une fonction factorielle classique. En apparence, il ne semble y avoir aucun problème, mais le code suivant peut provoquer un problème.

var anotherFactorial = factorial; 
anotherFactorial(4); //输出 24 
factorial = null;

anotherFactory (4); //TypeError : La propriété 'factorielle' de objet [object Window] n'est pas une fonction testée sous chrome
La raison est que, le nom de la fonction que nous avons défini est en fait un pointeur vers la fonction. À ce moment, anotherFactorial est défini et pointe vers cette fonction, donc appeler anotherFactorial (4) peut générer avec succès 24
À ce moment, factorial = null then ; exécuter La référence de la fonction définie est laissée avec anotherFactorial, puis le message d'erreur ci-dessus sera affiché lors de l'appel de anotherFactorial(4).
À ce stade, arguments.callee peut être utilisé pour remplacer factoriel dans la définition de la fonction
La définition de la fonction devient :

Le code est le suivant :

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * arguments.callee(num-1); 
} 
}

Ensuite, en utilisant les 4 lignes de code de test ci-dessus, la dernière ligne de code de test peut également en générer 24 avec succès.

Résumé :

Grâce à l'article ci-dessus Introduction détaillée, je pense que mes amis comprennent mieux l'utilisation des fonctions récursives en JavaScript, j'espère que cela vous sera utile dans votre travail !

Recommandations associées :

Analyse et explication des fonctions récursives en JavaScript


Fonction récursive en JS


Compréhension approfondie des fonctions récursives en JavaScript et partage d'exemples de code

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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