Apa itu Rekursi Ekor?

Dalam pemrograman komputer, rekursi ekor adalah penggunaan panggilan ekor untuk melakukan fungsi rekursif. Panggilan ekor adalah ketika suatu fungsi dipanggil sebagai tindakan terakhir dari fungsi lain. Misalnya, dalam program JavaScript ini:

 var myTailFunc = function (myVar) {return myVar; }; var myFunc = fungsi (myVar) {return myTailFunc (myVar); }; 

Di sini, panggilan ke myTailFunc (myVar) adalah panggilan ekor karena ini adalah operasi terakhir dari myFunc (myVar) . Ketika kompiler melihat bahwa ini adalah operasi terakhir dari myFunc, ia dapat melakukan optimasi kecil. Pada dasarnya, tidak perlu memasukkan alamat pengirim ke stack, karena itu tidak perlu kembali ke myFunc . Itu dapat mengembalikan nilai kembali myTailFunc sebagai nilai pengembalian myFunc .

Optimasi kecil ini menjadi lebih signifikan ketika digunakan dalam fungsi rekursif. Biasanya, setiap tingkat rekursi akan membutuhkan alamat pengirim tambahan untuk didorong ke tumpukan. Rekursi ekor membuat ini tidak perlu.

Berikut adalah contoh fungsi faktorial JavaScript sederhana yang ditulis pertama kali tanpa, dan kemudian dengan, rekursi ekor.

Fungsi faktorial tanpa rekursi ekor

 var factorial = function (n) {if (n == 0) {return 1; } else {return n * faktorial (n - 1); }}; 

Fungsi ini rekursif, tetapi tidak ekor rekursif. Proses akhir fungsi adalah operasi perkalian (" * "), sehingga rekursi akan selalu perlu kembali ke fungsi pemanggilan.

Fungsi faktorial dengan rekursi ekor

 var factorial = function (n) {var recursion = function (n, subTotal) {if (n == 0) {return subTotal; } else {pengembalian rekursi (n - 1, n * subTotal); }}; rekursi balik (n, 1); }; 

Fungsi, istilah pemrograman