Dalam teori komputabilitas, fungsi yang dapat dihitung juga disebut fungsi rekursif. Setidaknya pada pandangan pertama, mereka tidak memiliki kesamaan apa pun dengan apa yang Anda sebut "rekursif" dalam pemrograman sehari-hari (yaitu, fungsi yang menyebut dirinya sendiri).
Apa arti sebenarnya dari rekursif dalam konteks kemampuan komputasi? Mengapa fungsi-fungsi itu disebut "rekursif"?
Dengan kata lain: Apa hubungan antara dua makna "rekursif"?
computability
terminology
history
Golo Roden
sumber
sumber
Jawaban:
Tetapkan beberapa fungsi dasar:
fungsi nol
fungsi penerus
fungsi proyeksi
Mulai sekarang saya akan menggunakan untuk menunjukkan(x1,x2,...,xn)xn¯ ( x1, x2, ... , xn)
Tentukan komposisi:
Fungsi yang diberikan
Bangun fungsi berikut:
Tetapkan rekursi primitif:
Fungsi yang diberikan
Bangun fungsi berikut (secara terpisah):
Semua fungsi yang dapat dibuat menggunakan komposisi dan rekursi primitif pada fungsi dasar , disebut primitif rekursif . Disebut demikian menurut definisi. Sementara tautan dengan fungsi yang menyebut dirinya ada, tidak perlu mencoba dan menautkannya satu sama lain. Anda mungkin menganggap rekursi sebagai homonim.
Definisi dan konstruksi di atas dibangun oleh Gödel (beberapa orang lain juga terlibat) dalam upaya untuk menangkap semua fungsi yang dapat dihitung yaitu ada Mesin Turing untuk fungsi tersebut. Perhatikan bahwa konsep Mesin Turing belum dijelaskan, atau setidaknya sangat kabur.
(Un) untungnya, seseorang bernama Ackermann datang dan mendefinisikan fungsi berikut:
Minimalisasi tanpa batas
Semua fungsi yang dapat dibangun dengan semua konstruksi yang didefinisikan di atas disebut rekursif . Sekali lagi, nama rekursif hanya berdasarkan definisi, dan itu tidak selalu memiliki korelasi dengan fungsi yang menyebut diri mereka. Sungguh, anggap itu homonim.
Fungsi rekursif dapat berupa fungsi rekursif parsialA c k
Jika Anda tertarik, Anda bisa mencoba membuat kelas Gödel lebih besar. Anda dapat mencoba menentukan 'kebalikan' dari minimisasi tanpa batas. Artinya, maksimalisasi tanpa batas yaitu fungsi yang menemukan akar terbesar. Namun, Anda mungkin menemukan bahwa penghitungan fungsi itu sulit (tidak mungkin). Anda dapat membaca Masalah Sibuk Berang-berang , yang mencoba menerapkan maksimalisasi tanpa batas.
sumber
Para pendiri teori komputasi adalah ahli matematika. Mereka menemukan apa yang sekarang disebut teori komputabilitas sebelum ada komputer. Apa cara matematikawan mendefinisikan fungsi yang dapat dihitung? Dengan definisi rekursif!
Jadi ada fungsi rekursif sebelum ada model komputasi lain seperti mesin Turing atau kalkulus lambda atau mesin register. Jadi orang menyebut fungsi ini sebagai fungsi rekursif. Fakta bahwa mereka ternyata persis seperti yang dapat dihitung oleh mesin Turing dan model lainnya adalah peristiwa selanjutnya (kebanyakan dibuktikan oleh Kleene).
Nama bidang yang digunakan untuk teori rekursi. Namun telah ada dorongan yang berhasil dalam beberapa dekade terakhir untuk mengubah nama menjadi sesuatu yang lebih menarik dari teori rekursi menjadi sesuatu yang lebih banyak keahlian komputer (vs matematika). Akibatnya lapangan sekarang disebut teori komputabilitas. Namun jika Anda melihat buku, makalah, konferensi, dll. Di awal dekade mereka disebut teori rekursi dan bukan teori komputabilitas. Bahkan judul buku Soare sendiri tahun 1987 (yang merupakan orang utama di balik dorongan untuk mengubah nama menjadi teori komputabilitas) adalah "Recursively Enumerable Sets and Degrees".
Jika Anda ingin tahu lebih banyak tentang sejarah yang menyenangkan dan tempat yang baik untuk membaca tentang itu adalah bab pertama dari Teori Rekursi Klasik oleh Odifreddi.
sumber
Robert Soare menulis esai tentang masalah ini. Menurutnya, istilah fungsi rekursif (umum) diciptakan oleh Gödel, yang mendefinisikannya menggunakan semacam rekursi timbal balik. Nama macet, meskipun kemudian definisi setara lainnya ditemukan.
Untuk informasi lebih lanjut, saya merekomendasikan esai Soare.
sumber
bukannya memberikan komentar panjang memutuskan untuk menambahkan jawaban:
Karena mereka didefinisikan secara rekursif , yaitu " fungsi yang lebih kompleks didefinisikan dalam hal fungsi yang didefinisikan sebelumnya, lebih sederhana "
Jenis prosedur iteratif atau tambahan ini menciptakan fungsi yang terdefinisi dengan baik (dalam pengertian matematika)
Ini adalah makna dari sifat recursiveness dalam bahasa matematika. Lihat di bawah bagaimana ini berhubungan dengan rekursi dalam bahasa pemrograman.
Bandingkan prosedur ini dengan teknik dan metode seperti induksi (matematika) yang juga merupakan contoh ketepatan dalam matematika.
Pemrograman memiliki nada matematika serta teknik.
Prosedur (biasanya konstruktif) ini juga disebut sebagai " bootstrap " dalam bahasa Sistem Operasi.
Namun sebuah runtime rekursi fungsi yang sama (yaitu caling sendiri selama runtime-nya ), karena harus (hmm, harus) terjadi pada nilai-nilai yang sudah dihitung (atau argumen), atau dengan kata lain, dalam bagian dari hasil set sudah dihitung , juga rekursif dalam arti di atas, yaitu " fungsi yang didefinisikan sebelumnya ditentukan (dan nilainya) "
Lain tidak terdefinisi dengan baik, dan mengarah ke hal-hal seperti Stack Overflow :))))
Untuk memberikan contoh lebih lanjut dari Sistem Operasi, rekursi runtime (memanggil dirinya sendiri) dapat diambil sebagai analog dari sistem operasi yang me-reboot setelah pembaruan tertentu (misalnya pembaruan inti). Banyak OS melakukan prosedur berikut:
Jawaban indah Auberon menunjukkan prosedur semacam ini secara lebih rinci.
sumber