sebuah fungsi yang memanggil dirinya sendiri Rekursif sebuah fungsi yang memanggil dirinya sendiri
Salah satu konsep paling dasar dalam ilmu komputer dan pemrograman adalah pengunaan fungsi sebagai abstraksi untuk kode-kode yang digunakan berulang kali. Kedekatan ilmu komputer dengan matematika juga menyebabkan konsep-konsep fungsi pada matematika seringkali dijumpai. Salah satu konsep fungsi pada matematika yang ditemui pada ilmu komputer adalah fungsi rekursif: sebuah fungsi yang memanggil dirinya sendiri
contoh fungsi rekursif, untuk menghitung hasil kali dari dua bilangan def kali(a, b): return a if b == 1 else a + kali(a, b - 1) selama nilai b bukan 1, fungsi akan terus memanggil perintah (a + kali(a, b - 1))
kali(2, 4) -> 2 + kali(2, 3) -> 2 + (2 + kali(2, 2)) -> 2 + (2 + (2 + kali(2, 1))) -> 2 + (2 + (2 + 2)) -> 2 + (2 + 4) -> 2 + 6 -> 8
Contoh lain def faktorial(n): return n if n == 1 else n * faktorial(n - 1)
faktorial(5) -> 5. faktorial(4) -> 5. (4. faktorial(3)) -> 5 faktorial(5) -> 5 * faktorial(4) -> 5 * (4 * faktorial(3)) -> 5 * (4 * (3 * faktorial(2))) -> 5 * (4 * (3 * (2 * faktorial(1)))) -> 5 * (4 * (3 * (2 * 1))) -> 5 * (4 * (3 * 2)) -> 5 * (4 * 6) -> 5 * 24 -> 120
Analisis Algoritma Rekursif Perbedaan utama pada algoritma rekursif ialah kita tidak dapat secara langsung melihat berapa kali bagian rekursif dari algoritma akan dijalankan. Pada algoritma yang menggunakan perulangan for misalnya, kita dapat langsung menghitung jumlah perulangan untuk menghitung total langkah yang dibutuhkan. Dalam algoritma rekursif, jumlah perulangan tidak secara eksplisit bisa didapatkan karena informasi yang kita miliki adalah kapan algoritma berhenti, bukan berapa kali kode dieksekusi
def faktorial(n): return n if n == 1 else n * faktorial(n - 1) Informasi yg ada : algoritma berhenti melakukan rekursif, jika n == 1. jumlah data berkurang pada setiap pemanggilan faktorial
Untuk kasus n > 1
Fungsi akan berhenti jika harga (n – k) = 1 Sehingga k = n – 1 Maka dapat disimpulkan bahwa fungsi faktorial memiliki kompleksitas n−1, atau O(n).