Elixier - Rekursion

Rekursion ist eine Methode, bei der die Lösung eines Problems von den Lösungen für kleinere Instanzen desselben Problems abhängt. Die meisten Computerprogrammiersprachen unterstützen die Rekursion, indem sie einer Funktion erlauben, sich innerhalb des Programmtextes aufzurufen.

Idealerweise haben rekursive Funktionen eine Endbedingung. Diese Endbedingung, auch als Basisfall bezeichnet, beendet die erneute Eingabe der Funktion und das Hinzufügen von Funktionsaufrufen zum Stapel. Hier stoppt der rekursive Funktionsaufruf. Betrachten wir das folgende Beispiel, um die rekursive Funktion besser zu verstehen.

defmodule Math do
   def fact(res, num) do
   if num === 1 do
      res
   else
      new_res = res * num
      fact(new_res, num-1)
      end
   end
end

IO.puts(Math.fact(1,5))

Wenn das obige Programm ausgeführt wird, generiert es das folgende Ergebnis:

120

Also in der obigen Funktion, Math.factberechnen wir die Fakultät einer Zahl. Beachten Sie, dass wir die Funktion in sich selbst aufrufen. Lassen Sie uns jetzt verstehen, wie das funktioniert.

Wir haben es mit 1 und der Zahl versehen, deren Fakultät wir berechnen möchten. Die Funktion prüft, ob die Zahl 1 ist oder nicht und gibt res zurück, wenn sie 1 ist(Ending condition). Wenn nicht, erstellt es eine Variable new_res und weist ihr den Wert der vorherigen res * current num zu. Es gibt den Wert zurück, der von unserem Funktionsaufruf fact (new_res, num-1) zurückgegeben wird . Dies wiederholt sich, bis wir num als 1 erhalten. Sobald dies geschieht, erhalten wir das Ergebnis.

Betrachten wir ein anderes Beispiel, bei dem jedes Element der Liste einzeln gedruckt wird. Dazu verwenden wir diehd und tl Funktionen von Listen und Mustervergleich in Funktionen -

a = ["Hey", 100, 452, :true, "People"]
defmodule ListPrint do
   def print([]) do
   end
   def print([head | tail]) do 
      IO.puts(head)
      print(tail)
   end
end

ListPrint.print(a)

Die erste Druckfunktion wird aufgerufen, wenn eine leere Liste vorliegt(ending condition). Wenn nicht, wird die zweite Druckfunktion aufgerufen, die die Liste in 2 teilt und das erste Element der Liste dem Kopf und das verbleibende Element der Liste dem Ende zuweist. Der Kopf wird dann gedruckt und wir rufen die Druckfunktion mit dem Rest der Liste, dh dem Schwanz, erneut auf. Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Hey
100
452
true
People