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.
Tantangan
MudahBuat 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.
- Baca input string yang mewakili angka awal hitung mundur
- Baca input string yang mewakili awalan pesan khusus (misalnya,
"Launch in","Timer", atau"Countdown") - Ubah input pertama menjadi integer menggunakan
int.parse() - Buat fungsi rekursif bernama
customCountdownyang menerima dua parameter: - Integer
numberyang mewakili nilai hitung mundur saat ini - String
messagePrefixuntuk pesan khusus - 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 - Panggil fungsi
customCountdowndengan angka yang sudah diubah dan awalan pesan - 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
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Manipulasi list Tingkat Lanjut
Properti list: first dan lastStatus list: isEmpty dan isNotEmpMembalikkan listMenambahkan ke list: insertMenghapus dari list: removeWhereMencari dalam list: indexOfMengurutkan listMengacak listRekap: Pengatur list4Manipulasi Map Lanjutan
Melakukan perulangan pada MapMemeriksa kunci dan nilaiProperti Map: kunci dan nilaiPenambahan Bersyarat: putIfAbsentMenghapus Entri dari MapMap BersarangRingkasan: Pembaruan Inventaris7Fungsi Lanjutan
Fungsi AnonimMeneruskan Fungsi sebagai ArgumenMemahami ClosurePengantar RekursiFungsi Rekursif: Hitung MundurFungsi Rekursif: FaktorialRangkuman: Pemroses list2Operasi Fungsional pada list
Mengubah dengan 'map'Menyaring dengan 'where'Menggunakan '.toList()'Memeriksa Kondisi dengan 'any'Kondisi dengan 'every'Menemukan dengan 'firstWhere'Ulasan: Penyaringan Data5Proyek: Perhitungan Keranjang Belanja
Menyiapkan ProyekMenambahkan Barang ke Keranjang3set
Apa itu set?Membuat setMenambahkan dan menghapus elemen dari setMemeriksa elemen dalam setMengubah list menjadi setGabungan setIrisan setSelisih setRangkuman: Daftar tamu unikLatihan sendiri: Compiler Dart online