Rekursi dan penyerapan boleh digunakan untuk menyelesaikan masalah pengaturcaraan. Pendekatan untuk menyelesaikan masalah menggunakan rekursi atau lelaran bergantung pada cara menyelesaikan masalah. The perbezaan utama antara rekursi dan lelaran ialah Rekursi adalah satu mekanisme untuk memanggil fungsi dalam fungsi yang sama manakala lelaran adalah untuk melaksanakan satu set arahan berulang kali sehingga keadaan yang diberikan adalah benar. Rekursi dan penyerapan adalah teknik utama untuk membangunkan algoritma dan membina aplikasi perisian.
1. Gambaran Keseluruhan dan Perbezaan Utama
2. Apakah Rekursi
3. Apakah yang dimaksud dengan Iteration?
4. Kesamaan Antara Rekursi dan Pengulangan
5. Side by Side Perbandingan - Rekursi vs Iteration dalam Borang Tabular
6. Ringkasan
Apabila fungsi memanggil dirinya dalam fungsi, ia dikenali sebagai Rekursi. Terdapat dua jenis rekursi. Mereka adalah rekursi terhingga dan rekursi tak terhingga. Rekursi selesai mempunyai keadaan penamatan. Rekursi tak terhingga tidak mempunyai keadaan penamatan.
Rekursi boleh dijelaskan menggunakan program untuk mengira faktorial.
n! = n * (n-1) !, jika n> 0
n! = 1, jika n = 0;
Rujuk kod bawah untuk mengira faktorial 3 (3! = 3 * 2 * 1).
intmain ()
int value = factorial (3);
printf ("Factorial adalah% d \ n", nilai);
kembali 0;
intfactorial (intn)
jika (n == 0)
kembali 1;
lain
pulangan n * factorial (n-1);
Apabila memanggil faktorial (3), fungsi itu akan memanggil faktorial (2). Apabila memanggil faktorial (2), fungsi itu akan memanggil faktorial (1). Kemudian factorial (1) akan memanggil factorial (0). faktorial (0) akan kembali 1. Dalam program di atas, n == 0 keadaan dalam "jika blok" adalah keadaan asas. Menurut Begitu juga, fungsi factorial dipanggil lagi dan lagi.
Fungsi rekursif berkaitan dengan timbunan. Di C, program utama boleh mempunyai banyak fungsi. Oleh itu, utama () adalah fungsi panggilan, dan fungsi yang dipanggil oleh program utama adalah fungsi yang dipanggil. Apabila fungsi dipanggil, kawalan diberikan kepada fungsi yang dipanggil. Selepas pelaksanaan fungsi selesai, kawalan dikembalikan ke utama. Kemudian program utama diteruskan. Jadi, ia mewujudkan rekod pengaktifan atau bingkai tindanan untuk meneruskan pelaksanaan.
Rajah 01: Rekursi
Dalam program di atas, apabila memanggil factorial (3) dari utama, ia mewujudkan rekod pengaktifan dalam timbunan panggilan. Kemudian, faktorial (2) bingkai tindanan dibuat di atas timbunan dan sebagainya. Rekod pengaktifan menyimpan maklumat mengenai pembolehubah tempatan dan lain-lain. Setiap kali fungsi dipanggil, satu set pemboleh ubah setempat dicipta di atas timbunan. Bingkai timbunan ini boleh memperlahankan kelajuan. Begitu juga dalam rekursi, fungsi berfungsi sendiri. Kerumitan masa untuk fungsi rekursif didapati dengan bilangan kali, fungsi dipanggil. Kerumitan masa untuk satu panggilan fungsi ialah O (1). Untuk n bilangan panggilan rekursif, kerumitan masa adalah O (n).
Pengulangan adalah satu blok arahan yang berulang-ulang dan lagi sehingga keadaan yang diberikan adalah benar. Pengulangan boleh dicapai dengan menggunakan "untuk gelung", "do-while loop" atau "while loop". "Untuk gelung" sintaks adalah seperti berikut.
untuk (permulaan; keadaan; ubah suai)
// pernyataan;
Rajah 02: "untuk gambarajah aliran gelung"
Langkah awal memulakan terlebih dahulu. Langkah ini adalah untuk mengisytiharkan dan memulakan pembolehubah kawalan gelung. Sekiranya keadaan itu benar, kenyataan di dalam pendakap kerinting dilaksanakan. Kenyataan tersebut dilaksanakan sehingga keadaan itu benar. Sekiranya keadaan itu salah, kawalan akan pergi ke pernyataan seterusnya selepas "untuk gelung". Selepas melaksanakan pernyataan di dalam gelung, kawalan akan mengubah bahagian. Ia adalah untuk mengemas kini pemboleh ubah kawalan gelung. Kemudian keadaan diperiksa lagi. Jika keadaan itu benar, kenyataan di dalam pendakap kerinting akan dilaksanakan. Dengan cara ini "untuk gelung" melintang.
Dalam "sementara gelung", penyataan di dalam gelung dijalankan sehingga keadaan itu benar.
sementara (keadaan)
// pernyataan
Dalam "do-while" gelung, keadaan itu diperiksa pada akhir gelung. Oleh itu, gelung dijalankan sekurang-kurangnya sekali.
do
// pernyataan
sementara (keadaan)
Program untuk mencari faktorial 3 (3!) Menggunakan lelaran ("untuk gelung") adalah seperti berikut.
int main ()
intn = 3, faktorial = 1;
inti;
untuk (i = 1; i<=n ; i++)
faktorial = factorial * i;
printf ("Factorial adalah% d \ n", faktorial);
kembali 0;
Rekursi vs Penyerapan | |
Rekursi adalah satu kaedah untuk memanggil fungsi dalam fungsi yang sama. | Pengulangan adalah satu blok arahan yang berulang sehingga keadaan yang diberikan adalah benar. |
Kompleks Ruang | |
Kerumitan ruang program rekursif lebih tinggi daripada lelaran. | Kerumitan ruang lebih rendah dalam lelaran. |
Kelajuan | |
Pelaksanaan rekursi perlahan. | Biasanya, lelaran lebih cepat daripada rekursi. |
Keadaan | |
Sekiranya tiada keadaan penamatan, terdapat rekursi tak terhingga. | Sekiranya keadaan itu tidak pernah menjadi palsu, ia akan menjadi lelaran tak terhingga. |
Timbunan | |
Dalam rekursi, timbunan digunakan untuk menyimpan pembolehubah tempatan apabila fungsi dipanggil. | Dalam lelaran, timbunan tidak digunakan. |
Kesesuaian Kod | |
Program rekursif lebih mudah dibaca. | Program iteratif lebih sukar dibaca daripada program rekursif. |
Artikel ini membincangkan perbezaan antara rekursi dan lelaran. Kedua-duanya boleh digunakan untuk menyelesaikan masalah pengaturcaraan. Perbezaan antara rekursi dan lelaran ialah rekursi adalah mekanisme untuk memanggil fungsi dalam fungsi yang sama dan lelaran untuk melaksanakan satu set arahan berulang kali sehingga keadaan yang diberikan adalah benar. Jika masalah boleh diselesaikan dalam bentuk rekursif, ia juga boleh diselesaikan menggunakan lelaran.
Anda boleh memuat turun versi PDF artikel ini dan menggunakannya untuk tujuan luar talian seperti nota kutipan. Sila muat turun versi PDF di sini Perbezaan antara Rekursi dan Pengulangan
1.Point, Tutorial. "Struktur Data dan Asas Rekurasa Algoritma.", Titik Tutorial, 15 Ogos 2017. Boleh didapati di sini
2.nareshtechnologies. "Rekursi dalam Fungsi C | Tutorial Bahasa C "YouTube, YouTube, 12 Sept 2016. Boleh didapati di sini
3.yusuf shakeel. "Algoritma Rekursif | Factorial - panduan langkah demi langkah "YouTube, YouTube, 14 Okt 2013. Boleh didapati di sini
1.'CPT-Recursion-Factorial-Code'By Pluke - Kerja sendiri, (Domain Awam) melalui Wikimedia Commons
2.'For-loop-diagram'By Tiada pengarang pembaca mesin yang dibekalkan - Kerja sendiri diasumsikan. (CC BY-SA 2.5) melalui Wikimedia Commons