Ketika mulai belajar lisp, saya menemukan istilah ekor-rekursif . Apa artinya
Rekursi ekor adalah strategi rekursif di mana suatu fungsi melakukan sejumlah pekerjaan, lalu memanggil dirinya sendiri. "Ekor" mengacu pada fakta bahwa rekursi berada di bagian paling akhir dari fungsi tersebut. Banyak - terutama fungsional - kompiler bahasa pemrograman dapat mengubah jenis panggilan ini menjadi iterasi, yang berarti rekursi tail dalam bahasa yang didukung dapat digunakan tanpa takut terjadi stack overflow, berapa pun jumlah panggilannya.
Ketika mulai belajar lisp, saya menemukan istilah ekor-rekursif . Apa artinya
Sederhananya, apa itu optimasi tail-call? Lebih khusus, potongan kode kecil apa yang bisa diterapkan, dan di mana tidak, dengan penjelasan
Bagaimana cara memutus loop? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else if(product.toString.equals(product.toString.reverse)) largest=largest max product } } Bagaimana cara mengubah sarang...
Seperti yang ada saat ini, pertanyaan ini tidak cocok untuk format tanya jawab kami. Kami berharap jawaban didukung oleh fakta, referensi, atau keahlian, tetapi pertanyaan ini kemungkinan akan mengundang debat, argumen, polling, atau diskusi panjang. Jika Anda merasa pertanyaan
Saya memiliki potongan kode berikut yang gagal dengan kesalahan berikut: RuntimeError: kedalaman rekursi maksimum terlampaui Saya mencoba untuk menulis ulang ini untuk memungkinkan optimasi rekursi ekor (TCO). Saya percaya bahwa kode ini seharusnya berhasil jika TCO terjadi. def trisum(n,...
Tampaknya bagi saya itu akan bekerja dengan sangat baik untuk melakukan optimasi rekursi ekor di C dan C ++, namun saat debugging saya sepertinya tidak pernah melihat frame stack yang menunjukkan optimasi ini. Itu agak bagus, karena tumpukan memberi tahu saya seberapa dalam rekursi itu. Namun,...
Saya hampir mengerti cara kerja rekursi ekor dan perbedaan antara rekursi itu dan rekursi normal. Saya hanya tidak mengerti mengapa tidak memerlukan tumpukan untuk mengingat alamat pengirimnya. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n -...
Saya menemukan pertanyaan ini tentang bahasa mana yang mengoptimalkan rekursi ekor. Mengapa C # tidak mengoptimalkan rekursi ekor, jika memungkinkan? Untuk kasus konkret, mengapa metode ini tidak dioptimalkan menjadi satu loop ( Visual Studio 2008 32-bit, jika itu penting) ?: private static void...
Saya melihat kutipan ini pada pertanyaan: Apa bahasa fungsional yang baik untuk membangun layanan web? Scala khususnya tidak mendukung eliminasi panggilan ekor kecuali dalam fungsi rekursif sendiri, yang membatasi jenis komposisi yang dapat Anda lakukan (ini adalah batasan mendasar dari...
Bahasa fungsional mengarah pada penggunaan rekursi untuk menyelesaikan banyak masalah, dan oleh karena itu banyak dari mereka melakukan Tail Call Optimization (TCO). TCO menyebabkan panggilan ke fungsi dari fungsi lain (atau fungsi itu sendiri, dalam hal ini fitur ini juga dikenal sebagai Tail...
Saya memiliki algoritma pathfinding rekursif ekor yang telah saya terapkan dalam JavaScript dan ingin tahu apakah ada (semua?) Browser yang mungkin mendapatkan pengecualian stack overflow.
Saya menemukan perintah "waktu" di unix hari ini dan berpikir saya akan menggunakannya untuk memeriksa perbedaan runtime antara fungsi rekursif ekor dan rekursif normal di Haskell. Saya menulis fungsi berikut: --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1...
Berikut adalah sepotong kode dari dokumentasi untuk fs2 . Fungsi goini bersifat rekursif. Pertanyaannya adalah bagaimana kita tahu apakah itu stack safe dan bagaimana alasannya jika ada fungsi stack safe? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s:...