← Kembali ke kursus
Pelajaran kursus · JavaScript
Pelajaran 15

Generator dan rekursi

yield untuk lazy sequence + fungsi yang memanggil diri sendiri.

Pahami konsepnya

Generator adalah fungsi yang menghasilkan nilai satu per satu dengan yield: function* fib() { yield 1; yield 1; yield 2; } — setiap yield menjeda eksekusi dan menyerahkan nilai. Panggil .next() untuk maju satu langkah, atau iterasi dengan for-of. Generator adalah fondasi for-of, spread, dan async/await.

Rekursi adalah fungsi yang memanggil dirinya sendiri pada versi lebih kecil dari masalahnya. Kasus klasik: faktorial(n) = n * faktorial(n-1), dengan kasus dasar faktorial(0) = 1. Tanpa kasus dasar, rekursi berputar selamanya (stack overflow).

Kegunaan generator: lazy evaluation (fibonacci tanpa menyimpan semua), pipeline data, dan custom iterable. Rekursi: tree traversal, divide-and-conquer, dan backtracking.

Coba contoh kode

// generator
function* fibonacci(n) {
  let a = 0, b = 1;
  for (let i = 0; i < n; i++) {
    yield a;
    [a, b] = [b, a + b];
  }
}

for (const f of fibonacci(8)) {
  console.log(f);  // 0 1 1 2 3 5 8 13
}

// rekursi
function faktorial(n) {
  if (n <= 1) return 1;         // kasus dasar
  return n * faktorial(n - 1);   // kasus rekursif
}
console.log(faktorial(5));  // 120

Generator menghasilkan fibonacci secara lazy — satu nilai per panggilan next(). Rekursi faktorial berhenti di kasus dasar n<=1. Tanpanya, stack overflow.

Latihan singkat

Uji: faktorial(6) rekursif — harus `720`.