Maison  >  Article  >  interface Web  >  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

黄舟
黄舟original
2017-05-26 10:01:571198parcourir

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

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

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

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

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

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

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!

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