Rekursi vs Iterasi
Kapan memilih masing-masing.
Rekursi vs Iterasi adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Dua Cara untuk Mengulang
Banyak masalah dapat diselesaikan dengan rekursi atau iterasi. Iterasi menggunakan perulangan, sedangkan rekursi menggunakan pemanggilan fungsi.
Keduanya dapat menghasilkan hasil yang sama, tetapi berbeda dalam gaya, penggunaan memori, dan kecepatan.
Faktorial dengan Perulangan
Berikut faktorial yang ditulis secara iteratif dengan perulangan for. Tidak ada fungsi yang memanggil dirinya sendiri; satu variabel mengakumulasikan hasil perkalian.
#include <stdio.h>
long factorial(int n) {
long result = 1;
for (int i = 2; i <= n; i++)
result *= i;
return result;
}
int main(void) {
printf("%ld\n", factorial(6));
return 0;
}Faktorial dengan Rekursi
Versi rekursif lebih singkat dan secara langsung mencerminkan definisi matematika.
Keduanya mencetak 720 untuk factorial(6), tetapi menggunakan mekanisme yang berbeda.
long factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}Perbedaan Penggunaan Memori
Iterasi biasanya menggunakan memori yang tetap dan kecil: hanya beberapa variabel lokal.
Rekursi menambahkan satu bingkai tumpukan untuk setiap pemanggilan, sehingga rekursi yang dalam menggunakan lebih banyak memori dan dapat kehabisan ruang tumpukan.
Perbedaan Kecepatan
Setiap pemanggilan rekursif memiliki biaya kecil: menyiapkan bingkai dan mengembalikannya.
Untuk tugas penghitungan sederhana, perulangan sering kali sedikit lebih cepat karena menghindari biaya pemanggilan tersebut.
Saat Rekursi Lebih Unggul
Rekursi sangat sesuai ketika masalahnya secara alami bersifat rekursif, seperti pohon, struktur bertingkat, atau algoritme bagi-dan-taklukkan.
Dalam situasi tersebut, kode rekursif lebih singkat dan jelas daripada perulangan setara yang menggunakan tumpukan manual.
Saat Iterasi Lebih Unggul
Untuk pengulangan linear sederhana seperti menjumlahkan array atau menghitung, perulangan lebih sederhana dan menggunakan memori konstan.
Perulangan juga menghindari risiko luapan tumpukan pada input berukuran besar.
int sum_array(int a[], int n) {
int total = 0;
for (int i = 0; i < n; i++)
total += a[i];
return total;
}Tugas Sama, Dua Gaya
Menjumlahkan 1 hingga n dapat dilakukan dengan kedua cara. Berikut versi iteratif yang mengembalikan jawaban yang sama seperti rekursi.
#include <stdio.h>
int sum_to(int n) {
int total = 0;
for (int i = 1; i <= n; i++)
total += i;
return total;
}
int main(void) {
printf("%d\n", sum_to(100));
return 0;
}Mengubah Rekursi Menjadi Perulangan
Rekursi apa pun dapat ditulis ulang menjadi iterasi, terkadang dengan menggunakan tumpukan eksplisit buatan Anda sendiri.
Rekursi linear sederhana, seperti faktorial atau sum, dapat diubah menjadi perulangan biasa dengan variabel akumulator.
#include <stdio.h>
int main(void) {
int n = 5, result = 1;
while (n > 1) { result *= n; n--; }
printf("%d\n", result);
return 0;
}Catatan tentang Rekursi Ekor
Pemanggilan tail-recursive adalah tindakan terakhir dalam suatu fungsi. Beberapa kompilator mengoptimalkannya menjadi perulangan dengan menggunakan kembali satu bingkai.
C tidak menjamin hal ini, jadi jangan mengandalkannya untuk rekursi yang dalam.
int sum_tail(int n, int acc) {
if (n == 0) return acc;
return sum_tail(n - 1, acc + n);
}Memilih Pendekatan
Tanyakan: apakah masalahnya secara alami bertingkat atau menggunakan strategi bagi-dan-taklukkan? Jika ya, rekursi cocok digunakan.
Apakah masalahnya berupa pengulangan linear sederhana dengan kemungkinan input yang sangat besar? Jika ya, iterasi lebih aman dan sering kali lebih cepat.
Pemeriksaan Singkat
Bandingkan kedua pendekatan tersebut.
Rangkuman
Rekursi dan iterasi dapat menyelesaikan masalah yang sama. Perulangan menggunakan memori konstan dan sangat baik untuk tugas linear; rekursi lebih jelas untuk masalah bertingkat dan bagi-dan-taklukkan, tetapi memerlukan satu bingkai tumpukan untuk setiap pemanggilan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Rekursi vs Iterasi” gratis?
Ya — teks lengkap “Rekursi vs Iterasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Rekursi vs Iterasi”?
Kapan memilih masing-masing. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Rekursi vs Iterasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Cara Kerja Rekursi
- Masalah Rekursif Klasik
- Rekursi vs Iterasi
- Menghindari Stack Overflow