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