Apakah Rekursi Tail?

Dalam pengaturcaraan komputer, rekursi ekor adalah penggunaan panggilan ekor untuk melaksanakan fungsi rekursif. Panggilan ekor adalah apabila fungsi dipanggil sebagai tindakan terakhir fungsi lain. Sebagai contoh, dalam program JavaScript ini:

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

Di sini, panggilan ke myTailFunc (myVar) adalah panggilan ekor kerana ia adalah operasi terakhir myFunc (myVar) . Apabila pengkompil melihat bahawa ia adalah operasi akhir myFunc, ia boleh melakukan pengoptimuman kecil. Pada dasarnya, ia tidak perlu menolak alamat kembali ke timbunan, kerana ia tidak perlu kembali ke myFunc . Ia boleh mengembalikan nilai pulangan myTailFunc sebagai nilai pulangan myFunc .

Pengoptimuman kecil ini menjadi lebih penting apabila digunakan dalam fungsi rekursif. Biasanya, setiap tahap rekursi memerlukan alamat kembali tambahan untuk ditolak ke timbunan. Rekurali ekor membuat ini tidak perlu.

Berikut adalah contoh fungsi faktorial JavaScript yang mudah ditulis dahulu tanpa, dan kemudian dengan rekursi ekor.

Fungsi Factorial tanpa rekursi ekor

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

Fungsi ini adalah rekursif, tetapi bukan rekursif ekor. Proses akhir fungsi adalah operasi pendaraban (" * "), sehingga rekursi selalu perlu kembali ke fungsi panggilan.

Fungsi Factorial dengan rekursi ekor

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

Fungsi, Pengaturcaraan istilah