---LESSON_INFO--- **Learning Objectives:** - Memahami konsep rekursi dalam bahasa C - Belajar membuat fungsi rekursif - Mengenal kasus terminasi dalam rekursi - Memahami aplikasi rekursi dalam pemrograman **Prerequisites:** - Pemahaman tentang fungsi dalam C - Pemahaman dasar tentang perulangan ---END_LESSON_INFO--- # Rekursi dalam C Rekursi terjadi ketika sebuah fungsi berisi dalamnya sebuah panggilan ke dirinya sendiri. Rekursi bisa menghasilkan kode yang sangat rapi dan elegan yang intuitif untuk diikuti. Ini juga bisa menghasilkan penggunaan memori yang sangat besar jika rekursi terlalu dalam. Contoh umum di mana rekursi digunakan: * Menjelajahi struktur data rekursif seperti daftar tertaut, pohon biner, dll. * Menjelajahi skenario yang mungkin dalam permainan seperti catur Rekursi selalu terdiri dari dua bagian utama. Kasus terminasi yang menunjukkan kapan rekursi akan selesai dan panggilan ke dirinya sendiri yang harus membuat kemajuan menuju kasus terminasi. Sebagai contoh, fungsi ini akan melakukan perkalian dengan penambahan rekursif: ```c #include unsigned int multiply(unsigned int x, unsigned int y) { if (x == 1) { /* Kasus terminasi */ return y; } else if (x > 1) { /* Langkah rekursif */ return y + multiply(x-1, y); } /* Menangani skenario ketika x adalah nol */ return 0; } int main() { printf("3 kali 5 adalah %d", multiply(3, 5)); return 0; } ``` --- ## Tabel Elemen Rekursi dalam C | Elemen | Deskripsi | Contoh | |--------|-----------|--------| | Fungsi rekursif | Fungsi yang memanggil dirinya sendiri | `factorial(n)` memanggil `factorial(n-1)` | | Kasus terminasi | Kondisi yang menghentikan rekursi | `if (n <= 1) return 1;` | | Panggilan rekursif | Fungsi memanggil dirinya sendiri | `return n * factorial(n-1);` | | Parameter berubah | Parameter yang berubah untuk mendekati kasus terminasi | `factorial(n-1)` | ---EXERCISE--- # Latihan: Fungsi Faktorial Rekursif Definisikan fungsi baru bernama `factorial()` yang akan menghitung faktorial dengan perkalian rekursif (5! = 5 x 4 x 3 x 2 x 1). Perhatikan bahwa berdasarkan konvensi, faktorial dari 0 adalah sama dengan 1 (0! = 1). **Requirements:** - Buat fungsi rekursif untuk menghitung faktorial - Gunakan kasus terminasi yang benar - Fungsi harus bekerja untuk 0! = 1 **Expected Output:** ``` 0! = 1 1! = 1 3! = 6 5! = 120 ``` Try writing your solution in the code editor below! ---KEY_TEXT--- factorial(number-1) if (number > 1) return 1 int factorial ---END_KEY_TEXT--- ---EXPECTED_OUTPUT--- 0! = 1 1! = 1 3! = 6 5! = 120 ---END_EXPECTED_OUTPUT--- ---INITIAL_CODE--- #include int main() { /* kode pengujian */ printf("0! = %i\\n", factorial(0)); printf("1! = %i\\n", factorial(1)); printf("3! = %i\\n", factorial(3)); printf("5! = %i\\n", factorial(5)); } /* definisikan fungsi Anda di sini (jangan lupa untuk deklarasikan) */ ---END_INITIAL_CODE--- ---SOLUTION_CODE--- #include int factorial(int number); int main() { /* kode pengujian */ printf("0! = %i\\n", factorial(0)); printf("1! = %i\\n", factorial(1)); printf("3! = %i\\n", factorial(3)); printf("5! = %i\\n", factorial(5)); } int factorial(int number) { if (number > 1) { return number * factorial(number-1); } else { return 1; } } ---END_SOLUTION_CODE---