Elixir - Rekursi

Rekursi adalah metode di mana solusi untuk suatu masalah bergantung pada solusi untuk contoh yang lebih kecil dari masalah yang sama. Sebagian besar bahasa pemrograman komputer mendukung rekursi dengan mengizinkan suatu fungsi memanggil dirinya sendiri di dalam teks program.

Idealnya fungsi rekursif memiliki kondisi akhir. Kondisi akhir ini, juga dikenal sebagai kasus dasar berhenti memasukkan kembali fungsi dan menambahkan panggilan fungsi ke tumpukan. Di sinilah panggilan fungsi rekursif berhenti. Mari kita perhatikan contoh berikut untuk lebih memahami fungsi rekursif.

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

Ketika program di atas dijalankan, ini menghasilkan hasil sebagai berikut -

120

Jadi pada fungsi di atas, Math.fact, kami menghitung faktorial sebuah angka. Perhatikan bahwa kita memanggil fungsi itu sendiri. Mari kita sekarang memahami cara kerjanya.

Kami telah menyediakannya dengan 1 dan bilangan yang faktorialnya ingin kami hitung. Fungsi tersebut memeriksa apakah angkanya 1 atau tidak dan mengembalikan res jika 1(Ending condition). Jika tidak, maka itu membuat variabel new_res dan memberikan nilai dari res * num sekarang. Ini mengembalikan nilai yang dikembalikan oleh fakta panggilan fungsi kita (new_res, num-1) . Ini berulang sampai kita mendapatkan jumlah sebagai 1. Setelah itu terjadi, kita mendapatkan hasilnya.

Mari kita pertimbangkan contoh lain, mencetak setiap elemen dari daftar satu per satu. Untuk melakukan ini, kami akan memanfaatkanhd dan tl fungsi daftar dan pencocokan pola dalam fungsi -

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)

Fungsi cetak pertama dipanggil ketika kita memiliki daftar kosong(ending condition). Jika tidak, maka fungsi cetak kedua akan dipanggil yang akan membagi daftar menjadi 2 dan menetapkan elemen pertama daftar ke kepala dan sisa daftar ke ekor. Kepala kemudian dicetak dan kami memanggil fungsi cetak lagi dengan sisa daftar, yaitu, ekor. Ketika program di atas dijalankan, menghasilkan hasil sebagai berikut -

Hey
100
452
true
People