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

Méthode d'implémentation récursive en JS

php中世界最好的语言
Libérer: 2018-04-18 09:07:40
original
2840 Les gens l'ont consulté

Cette fois je vous apporte quelles sont les précautionsVoici des cas pratiques.

Fonction récursive  : Une fonction récursive est construite en s'appelant par son nom.

Implémenter récursivement la fonction factorielle :

Méthode 1 : Utiliser le nom de la fonction via

 function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  console.log(factorial(4));
Copier après la connexion

Le résultat est : 24

Mais il y a un problème avec cette méthode d'implémentation de la récursivité. Observez le code suivant :

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  var anthorFactorial=factorial;
  console.log(anthorFactorial(4));
Copier après la connexion

. Le résultat est : 24

Mais :

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  var anthorFactorial=factorial;
  factorial=null;
  console.log(anthorFactorial(4));
Copier après la connexion

Le résultat est : erreur

C'est parce que :

Le nom de la fonction que nous avons défini est en fait un pointeur vers la fonction, et le anotherFactorial que nous avons défini pointe également vers cette fonction, donc appeler anotherFactorial (4) peut générer avec succès 24

Lorsque factorial = null, l'exécution de pour définir la référence de la fonction quittera 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.

Méthode 2 : En utilisant arguments.callee

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*arguments.callee(num-1);
    }
  }
  var anthorFactorial=factorial;
  factorial=null;
  console.log(anthorFactorial(4));
Copier après la connexion

Le résultat est : 24

arguments.callee est un pointeur vers la fonction en cours d'exécution, donc arguments.callee peut être utilisé pour implémenter des appels récursifs à la fonction. En utilisant arguments.callee au lieu du nom de la fonction, vous pouvez vous assurer qu'il n'y aura aucun problème quoi qu'il arrive lors de l'appel de la fonction. Par conséquent, lors de l’écriture de fonctions récursives, il est toujours plus sûr d’utiliser arguments.callee que d’utiliser des noms de fonctions.
Cependant, en mode strict, arguments.callee n'est pas accessible via des scripts, et une erreur sera signalée lors de l'accès à cette propriété. Cependant, le même effet peut être obtenu en nommant l'expression de fonction .

Méthode 3 : Utilisation d'expressions de fonctions nommées

 var factorial=function f(num){
    if(num<=1){
      return 1;
    }else{
      return num*f(num-1);
    }
  };
  f=null;
  console.log(factorial(4));
Copier après la connexion

Cette approche fonctionne à la fois en mode strict et non strict.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :



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!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!