Skip to main content

Apa itu panggilan ekor?

Dalam pemrograman komputer, panggilan ekor adalah situasi khusus dalam kode sumber program di mana fungsi, subrutin atau prosedur mengembalikan nilai yang diharapkan dengan memanggil fungsi lain alih -alih hanya melewati variabel yang memegang nilai pengembalian.Nama itu sendiri menunjukkan bahwa fungsi yang dipanggil untuk menghitung nilai yang akan dikembalikan adalah pada akhirnya, atau ekor, dari fungsi yang memanggilnya untuk memasok nilai pengembalian.Panggilan ekor menarik bagi beberapa programmer karena, dengan optimasi tertentu atau perilaku kompiler, tidak ada ruang tumpukan tambahan yang digunakan untuk menyimpan lokasi kode fungsi utama;Fungsi ekor sebagai gantinya digunakan untuk menghasilkan laporan nilai pengembalian langsung kembali ke titik panggilan di mana fungsi asli dipanggil.Penggunaan panggilan ekor sangat berguna dalam situasi di mana rekursi digunakan, karena jumlah ruang tumpukan yang digunakan untuk menyimpan alamat penelepon dalam kasus -kasus di mana panggilan rekursif sarang sangat dalam dapat dengan cepat kehabisan dan menghentikan pelaksanaan program.Meskipun menggunakan panggilan ekor dapat membantu meningkatkan kecepatan, penggunaan memori dan efisiensi dalam suatu program, itu juga dapat menyebabkan situasi di mana kode sumber direstrukturisasi untuk menggunakan panggilan dengan cara yang membuatnya sulit untuk debug dan dilacak, terutama dengan kasus -kasus dariRecursion.

Keberadaan panggilan ekor sangat disebabkan oleh bagaimana tumpukan panggilan bekerja dalam sebagian besar program komputer dan arsitektur sistem.Tumpukan, yang seperti setumpuk piring, adalah struktur data pertama-dalam, terakhir.Ketika fungsi, subrutin atau prosedur dipanggil, alamat dari mana panggilan dilakukan, disebut bingkai tumpukan, disimpan dalam tumpukan.Ini berarti program yang memanggil fungsi A, yang kemudian memanggil fungsi B, akan memiliki dua bingkai tumpukan, satu untuk fungsi B dan satu lagi di bawahnya untuk fungsi A. Setelah fungsi B selesai dieksekusi, bingkai tumpukannya muncul dari atasTumpukan dan Eksekusi kembali berfungsi, yang memiliki bingkai muncul dari tumpukan saat selesai, akhirnya mengembalikan kontrol program ke titik dari mana fungsi pertama awalnya dipanggil.

Ketika panggilan ekor digunakan, pernyataan pengembalian masukFungsi secara langsung menggunakan nilai pengembalian fungsi lain sebagai data yang akan dikirim ke kode panggilan.Dalam contoh di atas, jika fungsi fungsi panggilan B secara langsung dengan pernyataan pengembalian, maka panggilan ekor telah dibentuk.Di dalam tumpukan panggilan, alih -alih memiliki bingkai tumpukan untuk kedua fungsi A dan B, Fungsi B akan menerima alamat pengembalian dari fungsi Fungsi A dan Fungsi A akan muncul dan dibuang, yang berarti fungsi B akan melewati nilai pengembaliannya langsung kembali kembalike lokasi yang disebut fungsi A tanpa terlebih dahulu harus meneruskan kontrol kembali ke fungsi A. Ini meningkatkan kecepatan panggilan fungsi serta membantu menjaga jumlah informasi dalam tumpukan.

Properti yang dapat dilakukan oleh panggilan ekormereka pilihan yang sangat menarik untuk fungsi rekursif.Fungsi rekursif adalah fungsi yang menyebut dirinya berulang kali untuk menghitung nilai, seperti halnya saat melintasi struktur data daftar.Tidak ada bingkai tumpukan tambahan yang dibuat untuk panggilan fungsi bersarang, sehingga tingkat rekursi yang sangat dalam dapat dilakukan dengan aman tanpa ancaman langsung dari tumpukan overflow dan kemungkinan penghentian program.