Maison > interface Web > js tutoriel > Explication détaillée des cas de code pour l'implémentation récursive anonyme en Javascript

Explication détaillée des cas de code pour l'implémentation récursive anonyme en Javascript

黄舟
Libérer: 2017-05-26 10:01:57
original
1294 Les gens l'ont consulté

Cet article présente principalement l'exemple de code de Javascript pour implémenter la récursion anonyme, et utilise arguments.callee pour implémenter la récursivité anonyme. Ceux qui sont intéressés peuvent en apprendre davantage sur la

la récursivité est une technique de programmation courante. Je pense que tout le monde connaît la récursivité de nom réel, mais que se passe-t-il si vous souhaitez implémenter la récursivité anonyme ? Par exemple, si vous souhaitez renvoyer une fonction récursive anonyme , ou définir une fonction récursive anonyme et l'appeler directement, comment devez-vous procéder ? Cet article discutera de sa mise en œuvre.

Récursion de nom réel

Commençons par la récursion de nom réel, en utilisant l'exemple le plus simple de recherche de factorielles :

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * fact(n - 1);
 }
}
console.log(fact(5));
Copier après la connexion

La récursion nécessite un appel elle-même, ce qui est trivial si la fonction a un nom.

Utilisez variable pour implémenter la récursion

La fonction peut également être affectée à une variable, mais pour implémenter la récursivité, le corps de la fonction s'appuie toujours sur ce Nom de la variable :

var f = function(n) {
 if (n < 2) {
  return n;
 } else {
  return n * f(n - 1);
 }
}
console.log(f(5));
Copier après la connexion

Il faut dire que cette méthode n'est pas essentiellement différente de la précédente.

Récursion anonyme

Parlons maintenant de la mise en œuvre de la récursion anonyme.

Pensées initiales

Si vous souhaitez renvoyer une fonction récursive anonyme, ou définir une fonction récursive anonyme et l'appeler directement :

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * ?(n - 1);
 }
})(5);
Copier après la connexion

S'il n'y a pas de nom, nous ne savons pas quoi remplir le point d'interrogation dans le code et nous ne pouvons pas former de récursion. Que devons-nous faire à ce moment-là ? A ce moment, il faut demander les arguments objet .

Objet arguments

Dans une fonction javascript, l'objet arguments représente l'objet paramètre lorsqu'il est réellement appelé. Dans notre fonction récursive, nous n'avons en fait pas du tout besoin de définir les « paramètres formels » n :

function factNoParam() {
 if (arguments[0] < 2) {
  return arguments[0];
 } else {
  return arguments[0] * factNoParam(arguments[0] - 1);
 }
}
console.log(factNoParam(5));
Copier après la connexion

Tant que nous transmettons les paramètres réels lors de l'appel, nous pouvons utiliser des arguments[0] Obtenez la valeur réelle de ce paramètre transmis.

S'il y a plus de paramètres, ils peuvent également être obtenus par arguments[1], arguments[2], etc. Les arguments

arguments.callee Attribut

peuvent être utilisés pour obtenir des paramètres. Je pense que vous le savez peut-être déjà, mais les arguments. l'objet a en fait Il existe une propriété appelée appelé. arguments.callee représente la fonction elle-même. Qu'est-ce que cela signifie? En fait, on peut écrire fact comme ceci :

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
}
console.log(fact(5));
Copier après la connexion

Alors c'est toujours récursif. Parce que arguments.callee est en fait égal à un fait.

Donc, nous y sommes, avec l'aide de cet attribut, il n'est pas difficile d'implémenter la récursivité anonyme, il suffit de remplacer ? par arguments.callee :

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
})(5);
Copier après la connexion

Si nécessaire , ou il peut être renvoyé sous forme de récursion anonyme.

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