Heim  >  Artikel  >  Web-Frontend  >  Detailliertes Verständnis rekursiver Funktionen in JavaScript und Weitergabe von Beispielcode

Detailliertes Verständnis rekursiver Funktionen in JavaScript und Weitergabe von Beispielcode

黄舟
黄舟Original
2017-08-07 11:46:321091Durchsuche

Der folgende Herausgeber bringt Ihnen einen Artikel, der auf detaillierten Verständnissen und praktischen Beispielen rekursiver JS-Funktionen basiert (empfohlen). Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor und werfen wir einen Blick darauf

Die Programmiertechnik eines Programms, das sich selbst aufruft, wird Rekursion genannt.

Ein Prozess oder eine Funktion nennt sich in ihrer Definition oder Beschreibung normalerweise eine Methode, die dem ursprünglichen Problem ähnelt. Bei Skalierungsproblemen kann die rekursive Strategie die mehrfachen wiederholten Berechnungen, die im Problemlösungsprozess erforderlich sind, mit nur einer geringen Anzahl von Programmen beschreiben, wodurch die Menge an Programmcode erheblich reduziert wird. Die Kraft der Rekursion liegt darin, unendliche Sammlungen von Objekten mit endlichen Aussagen zu definieren. Mit rekursivem Denken geschriebene Programme sind oft sehr prägnant und leicht verständlich.

Im Allgemeinen erfordert die Rekursion Randbedingungen, einen rekursiven Vorwärtsabschnitt und einen rekursiven Rückkehrabschnitt. Wenn die Randbedingungen nicht erfüllt sind, schreitet die Rekursion voran; wenn die Randbedingungen erfüllt sind, kehrt die Rekursion zurück.

Hinweis:

(1) Rekursion ruft sich selbst in einer Prozedur oder Funktion auf

(2) Bei Verwendung Bei Verwendung der inkrementellen Rekursionsstrategie muss eine eindeutige Endbedingung für die Rekursion vorliegen, die als Rekursionsexit bezeichnet wird. Andernfalls wird sie auf unbestimmte Zeit fortgesetzt (Deadlock).

Rekursive Algorithmen werden im Allgemeinen verwendet, um drei Arten von Problemen zu lösen:

(1) Die Definition von Daten ist rekursiv definiert. (Fibonacci-Funktion)

(2) Die Problemlösung wird gemäß dem rekursiven Algorithmus implementiert. (Backtracking)

(3) Die Strukturform von Daten wird rekursiv definiert. (Baumdurchquerung, Diagrammsuche)

Nachteile der Rekursion:

Der rekursive Algorithmus ist bei der Lösung von Problemen weniger effizient. Während des rekursiven Aufrufprozesses öffnet das System einen Stapel, um die Rückgabepunkte, lokalen Mengen usw. jeder Schicht zu speichern. Zu viele Rekursionen können leicht zu einem Stapelüberlauf usw. führen.

Interessante Beispiele für rekursive Funktionen:

1. Klassisches Problem – ab dem 3. Monat nach der Geburt gibt es jeden Monat ein Kaninchenpaar Jedes Kaninchen bringt ein Kaninchenpaar zur Welt, nachdem das Kaninchen jeden Monat ein weiteres Kaninchenpaar geboren hat. Wenn die Kaninchen nicht sterben, wie hoch ist die Gesamtzahl der Kaninchen in jedem Monat des dritten Jahres? ? (Hinweis: Das Muster von Kaninchen ist die Reihenfolge 1,1,2,3,5,8,13,21....)


 class Program
 {
  static void Main(string[] args)
  {
   Program p = new Program();
   Console.WriteLine(p.tuzi(7));
  }
  public int tuzi(int n) 
  {
   if (n == 1 || n == 2)
   {
    return 1;
   }
   else 
   {
    return tuzi(n - 1) + tuzi(n - 2);
   }
  }
 }

2. Interessante Fragen – Alter. Da sitzen 5 Personen zusammen und fragen, wie alt die fünfte Person ist? Er sagte, er sei 2 Jahre älter als die vierte Person. Als ich die vierte Person fragte, wie alt sie sei, sagte er, er sei 2 Jahre älter als die dritte Person. Ich fragte die dritte Person und sie sagte, er sei zwei Jahre älter als die zweite Person. Fragte die zweite Person und sagte, er sei zwei Jahre älter als die erste Person. Schließlich fragte ich die erste Person und er sagte, er sei 10 Jahre alt. Wie alt ist die fünfte Person? Implementiert mit einem rekursiven Algorithmus.


class Program
 {
  static void Main(string[] args)
  {
   Program p = new Program();
   
   Console.WriteLine( p.age(5));
  }
  /// <summary>
  /// 递归法求岁数
  /// </summary>
  /// <param name="n">有几个人</param>
  /// <returns></returns>
  int age(int n)
  {
   int c;
   if(n==1)
    return 10;
  
   else
   {
    c = age(n-1)+2;
    return c;
   } 
  }

3. Interessante Frage – Affe isst Pfirsich. Es gibt einen Haufen Pfirsiche am Strand und fünf Affen kommen, um sie zu teilen. Der erste Affe teilte den Pfirsichhaufen in fünf Teile. Wenn noch einer übrig war, warf der Affe den überschüssigen ins Meer und nahm einen Teil weg. Der zweite Affe teilte den restlichen Pfirsich in fünf gleiche Teile, und es gab noch einen. Er warf auch den überschüssigen Pfirsich ins Meer und nahm sich einen. Ja, wie viele Pfirsiche es gab dort am Strand?
Code:


class Program
 {
  static void Main(string[] args)
  {
   
   Program p = new Program();
   
   Console.WriteLine( p.PeachNumber(5));
   
  }
  /// <summary>
  /// 递归法求桃子数
  /// </summary>
  /// <param name="n"></param>
  /// <returns></returns>
  int PeachNumber(int n) 
  {
   if (n == 1)
   {
    //最后一个是至少是六个
    return 6;
   }
   else 
   {
    return (PeachNumber(n - 1) + 1) * 5;
   }
  }

Das obige ist der detaillierte Inhalt vonDetailliertes Verständnis rekursiver Funktionen in JavaScript und Weitergabe von Beispielcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn