Menu
CoddyTech

Fungsi Rekursif: Hitung Mundur

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 48 dari 65.

Sekarang saatnya mempraktikkan rekursi dengan fungsi hitung mundur sederhana. Latihan ini akan membantumu memahami cara kasus dasar dan langkah rekursif bekerja bersama dalam kode nyata.

Fungsi hitung mundur dimulai dengan sebuah angka dan mencetak setiap angka hingga nol. Berikut cara rekursi membuatnya berfungsi: jika angkanya lebih besar dari nol, cetak angka tersebut lalu panggil fungsi yang sama dengan angka yang lebih kecil. Saat angkanya mencapai nol, berhenti.

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Kasus dasar: berhenti di sini
  }
  
  print(number);
  countdown(number - 1); // Langkah rekursif
}

Kasus dasar memeriksa apakah number <= 0 - saat inilah kita berhenti memanggil fungsi. Langkah rekursif memanggil countdown(number - 1), yang merupakan masalah yang sama, tetapi dengan input yang lebih kecil, sehingga secara bertahap mendekatkan kita ke kasus dasar.

Saat kamu memanggil countdown(3), fungsi ini mencetak 3, lalu memanggil countdown(2), yang mencetak 2, lalu memanggil countdown(1), yang mencetak 1, lalu memanggil countdown(0), yang mencetak "Done!" dan berhenti.

challenge icon

Tantangan

Mudah

Buat program yang menerapkan timer hitung mundur rekursif dengan pesan khusus. Programmu akan menunjukkan rekursi dengan menghitung mundur dari angka yang diberikan dan menampilkan pesan yang dipersonalisasi pada setiap langkah.

  1. Baca input string yang mewakili angka awal hitung mundur
  2. Baca input string yang mewakili awalan pesan khusus (misalnya, "Launch in", "Timer", atau "Countdown")
  3. Ubah input pertama menjadi integer menggunakan int.parse()
  4. Buat fungsi rekursif bernama customCountdown yang menerima dua parameter:
    • Integer number yang mewakili nilai hitung mundur saat ini
    • String messagePrefix untuk pesan khusus
  5. Fungsi tersebut harus menerapkan logika berikut:
    • Kasus dasar: Jika angkanya kurang dari atau sama dengan 0, cetak "Countdown complete!" lalu kembalikan
    • Langkah rekursif: Cetak awalan pesan diikuti angka saat ini, lalu panggil fungsi itu sendiri dengan number - 1
  6. Panggil fungsi customCountdown dengan angka yang sudah diubah dan awalan pesan
  7. Tampilkan hasil dalam format persis seperti yang ditunjukkan di bawah

Misalnya, jika inputnya adalah "5" dan "Launch in", programmu harus menghasilkan output berikut:

Starting countdown from: 5
Message prefix: Launch in
========================
Launch in 5
Launch in 4
Launch in 3
Launch in 2
Launch in 1
Countdown complete!

Jika inputnya adalah "3" dan "Timer", programmu harus menghasilkan output berikut:

Starting countdown from: 3
Message prefix: Timer
========================
Timer 3
Timer 2
Timer 1
Countdown complete!

Jika inputnya adalah "0" dan "Ready", programmu harus menghasilkan output berikut:

Starting countdown from: 0
Message prefix: Ready
========================
Countdown complete!

Programmu harus menerapkan fungsi rekursif customCountdown yang memanggil dirinya sendiri dengan angka yang dikurangi hingga mencapai kasus dasar. Fungsi tersebut harus mencetak pesan khusus dengan angka saat ini pada setiap pemanggilan rekursif, untuk menunjukkan bagaimana rekursi memecah masalah menjadi submasalah identik yang lebih kecil. Gunakan interpolasi string untuk memformat pesan hitung mundur sebagai "$messagePrefix $number".

Coba sendiri

import 'dart:io';

// TODO: Buat fungsi customCountdown-mu di sini
// Ingat untuk menangani kasus dasar (number <= 0) dan langkah rekursif

void main() {
  // Baca input
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // Ubah string menjadi bilangan bulat
  int number = int.parse(startingNumber!);
  
  // Tampilkan informasi awal
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Panggil fungsi customCountdown-mu di sini
  // Ingat untuk menangani keamanan null pada messagePrefix
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online