Kunci jawaban 03 Latihan Fungsi. Coba sendiri dulu ya.
3.1 Minimum
function min(a, b) {
if (a < b) return a;
else return b;
}Kenapa: begitu satu return dieksekusi, fungsi langsung berhenti, jadi cabang yang benar yang menentukan hasilnya. Versi satu baris pakai ternary: const min = (a, b) => a < b ? a : b;.
→ Soal: 03 Latihan Fungsi > 3.1 Minimum
3.2 Rekursi (isEven)
function isEven(n) {
if (n == 0) return true;
else if (n == 1) return false;
else if (n < 0) return isEven(-n);
else return isEven(n - 2);
}Kenapa: dua kasus dasar (0 dan 1) menghentikan rekursi; kasus umum mengecilkan n dua langkah mendekati kasus dasar. Tanpa cabang n < 0, isEven(-1) memanggil isEven(-3), isEven(-5), dan seterusnya — tak pernah sampai 0 atau 1, sampai stack habis (error “too much recursion”). Perbaikannya: angka negatif punya kegenapan yang sama dengan positifnya, jadi isEven(-n).
→ Soal: 03 Latihan Fungsi > 3.2 Rekursi (isEven)
3.3 Menghitung Karakter
function countChar(string, ch) {
let jumlah = 0;
for (let i = 0; i < string.length; i++) {
if (string[i] == ch) jumlah += 1;
}
return jumlah;
}
function countBs(string) {
return countChar(string, "B");
}Kenapa: countChar adalah konsep yang lebih umum (hitung karakter apa pun), dan countBs cuma kasus khususnya — satu baris yang memanggil fungsi umum dengan "B". Ini pola “tumbuhkan satu fungsi umum, lalu bungkus jadi yang khusus”. Loopnya mulai dari 0 dan berhenti sebelum string.length, karena posisi karakter mulai dari 0.