Eliksir - rekurencja

Rekursja to metoda, w której rozwiązanie problemu zależy od rozwiązań mniejszych wystąpień tego samego problemu. Większość języków programowania komputerów obsługuje rekursję, umożliwiając funkcji wywoływanie siebie w tekście programu.

W idealnym przypadku funkcje rekurencyjne mają warunek końcowy. Ten warunek końcowy, znany również jako przypadek podstawowy, przerywa ponowne wprowadzanie funkcji i dodawanie wywołań funkcji do stosu. Tutaj kończy się rekurencyjne wywołanie funkcji. Rozważmy następujący przykład, aby lepiej zrozumieć funkcję rekurencyjną.

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

Po uruchomieniu powyższego programu generuje następujący wynik -

120

Więc w powyższej funkcji Math.fact, obliczamy silnię liczby. Zauważ, że wywołujemy funkcję w sobie. Zrozummy teraz, jak to działa.

Podaliśmy mu 1 i liczbę, której silnię chcemy obliczyć. Funkcja sprawdza, czy liczba wynosi 1, czy nie, i zwraca res, jeśli wynosi 1(Ending condition). Jeśli nie, to tworzy zmienną new_res i przypisuje jej wartość poprzedniego res * current num. Zwraca wartość zwróconą przez fakt wywołania funkcji (new_res, num-1) . To się powtarza, aż liczba wynosi 1. Kiedy to się stanie, otrzymamy wynik.

Rozważmy inny przykład, drukując każdy element listy jeden po drugim. Aby to zrobić, użyjemyhd i tl funkcje list i dopasowywania wzorców w funkcjach -

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)

Pierwsza funkcja print jest wywoływana, gdy mamy pustą listę(ending condition). Jeśli nie, zostanie wywołana druga funkcja drukowania, która podzieli listę na 2 i przypisze pierwszy element listy do nagłówka, a pozostałą część listy do końca. Następnie drukowana jest głowa i ponownie wywołujemy funkcję print z resztą listy, tj. Tail. Uruchomienie powyższego programu daje następujący wynik -

Hey
100
452
true
People