Elixir - Récursivité

La récursivité est une méthode où la solution à un problème dépend des solutions aux instances plus petites du même problème. La plupart des langages de programmation informatique prennent en charge la récursivité en permettant à une fonction de s'appeler elle-même dans le texte du programme.

Idéalement, les fonctions récursives ont une condition de fin. Cette condition de fin, également connue sous le nom de cas de base, arrête de rentrer dans la fonction et d'ajouter des appels de fonction à la pile. C'est là que s'arrête l'appel de fonction récursive. Prenons l'exemple suivant pour mieux comprendre la fonction récursive.

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

Lorsque le programme ci-dessus est exécuté, il génère le résultat suivant -

120

Donc, dans la fonction ci-dessus, Math.fact, nous calculons la factorielle d'un nombre. Notez que nous appelons la fonction en elle-même. Voyons maintenant comment cela fonctionne.

Nous lui avons fourni 1 et le nombre dont nous voulons calculer la factorielle. La fonction vérifie si le nombre est 1 ou non et renvoie res s'il est 1(Ending condition). Sinon, il crée une variable new_res et lui affecte la valeur de res * current num. Il renvoie la valeur retournée par notre fonction call fact (new_res, num-1) . Cela se répète jusqu'à ce que nous obtenions num comme 1. Une fois que cela se produit, nous obtenons le résultat.

Prenons un autre exemple, imprimant chaque élément de la liste un par un. Pour ce faire, nous utiliserons lehd et tl fonctions des listes et correspondance de motifs dans les fonctions -

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)

La première fonction d'impression est appelée lorsque nous avons une liste vide(ending condition). Sinon, alors la deuxième fonction d'impression sera appelée qui divisera la liste en 2 et assignera le premier élément de la liste à la tête et le reste de la liste à la queue. La tête est alors imprimée et nous appelons à nouveau la fonction d'impression avec le reste de la liste, c'est-à-dire la queue. Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant -

Hey
100
452
true
People