Fungsi yang Rapi · Pelajaran 3 dari 11

Pengantar rekursi

9 menit baca · BelajarCode

Rekursi adalah teknik ketika sebuah fungsi memanggil dirinya sendiri. Rekursi cocok untuk masalah yang bisa dipecah menjadi versi lebih kecil dari masalah yang sama.

Contoh klasiknya faktorial: 5! = 5 × 4!, dan 4! = 4 × 3!, dan seterusnya sampai 1! = 1.

Python
1def faktorial(n):2    if n <= 1:3        return 14    return n * faktorial(n - 1)56print(faktorial(5))7print(faktorial(10))
Keluaran
120
3628800

Setiap fungsi rekursif punya dua bagian:

  1. Kasus dasar: kondisi berhenti yang langsung mengembalikan jawaban, di sini n <= 1.
  2. Kasus rekursif: memanggil dirinya sendiri dengan masalah yang lebih kecil, di sini faktorial(n - 1).

Menelusuri panggilan

Jejak faktorial(4)
PanggilanMenungguMengembalikan
faktorial(4)4 × faktorial(3)4 × 6 = 24
faktorial(3)3 × faktorial(2)3 × 2 = 6
faktorial(2)2 × faktorial(1)2 × 1 = 2
faktorial(1)Kasus dasar1

Panggilan-panggilan itu ditumpuk di memori yang disebut call stack. Setelah kasus dasar tercapai, jawabannya dikembalikan satu per satu dari bawah ke atas.

Contoh lain: jumlah digit

Python
1def jumlah_digit(n):2    if n < 10:3        return n4    return n % 10 + jumlah_digit(n // 10)56print(jumlah_digit(2026))
Keluaran
10

2026 dipecah menjadi digit terakhir (6) ditambah jumlah digit dari 202. Prosesnya berulang sampai tersisa satu digit.

Lupa kasus dasar

Tanpa kasus dasar, fungsi memanggil dirinya tanpa henti sampai Python menghentikannya dengan RecursionError: maximum recursion depth exceeded. Selalu pastikan setiap panggilan rekursif bergerak mendekati kasus dasar.

Rekursi tidak selalu efisien

Bilangan Fibonacci (0, 1, 1, 2, 3, 5, 8, ...) bisa ditulis secara rekursif, tetapi versi sederhananya menghitung nilai yang sama berulang-ulang:

Python
1panggilan = 023def fib(n):4    global panggilan5    panggilan += 16    if n < 2:7        return n8    return fib(n - 1) + fib(n - 2)910print(fib(20), "dengan", panggilan, "panggilan fungsi")
Keluaran
6765 dengan 21891 panggilan fungsi

Lebih dari dua puluh ribu panggilan hanya untuk fib(20)! Versi dengan perulangan biasa cukup 20 langkah. Teknik untuk mengatasi masalah ini, yaitu menyimpan hasil yang sudah dihitung, dipelajari di kursus Desain dan Analisis Algoritma.

Cek pemahaman

Apa yang dikembalikan jumlah_digit(507) dengan fungsi di atas?

Latihan

Palindrom secara rekursif

Kata palindrom dibaca sama dari depan dan belakang, misalnya "katak". Buat fungsi rekursif palindrom(kata): kata dengan panjang 0 atau 1 adalah palindrom, selain itu huruf pertama dan terakhir harus sama dan bagian tengahnya juga harus palindrom.

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.

Latih konsep ini

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi