Fungsi Rekursif: Faktorial
Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 49 dari 65.
Faktorial dari sebuah bilangan adalah operasi matematika klasik yang cocok untuk menunjukkan rekursi. Faktorial bilangan bulat positif n (ditulis sebagai n!) adalah hasil kali semua bilangan bulat positif dari 1 hingga n. Contohnya, 5! = 5 × 4 × 3 × 2 × 1 = 120.
Faktorial cocok untuk rekursi karena secara alami dapat dipecah menjadi masalah-masalah lebih kecil yang identik. Untuk menghitung 5!, kamu bisa menganggapnya sebagai 5 × 4!. Dan 4! sama dengan 4 × 3!, begitu seterusnya. Pola ini berlanjut hingga kamu mencapai 1!, yang sama dengan 1.
int factorial(int n) {
if (n <= 1) {
return 1; // Kasus dasar
}
return n * factorial(n - 1); // Langkah rekursif
}Kasus dasar menghentikan rekursi saat n <= 1, lalu mengembalikan 1. Langkah rekursif mengalikan angka saat ini dengan faktorial dari angka berikutnya yang lebih kecil. Saat kamu memanggil factorial(5), fungsi itu mengembalikan 5 * factorial(4), yang mengembalikan 5 * 4 * factorial(3), dan seterusnya hingga mencapai kasus dasar.
Pendekatan ini menunjukkan bagaimana rekursi menyelesaikan masalah dengan elegan dengan menguranginya menjadi versi yang lebih sederhana dari masalah yang sama, sehingga perhitungan rumit terasa alami dan intuitif.
Tantangan
MudahBuat program yang menghitung faktorial beberapa angka menggunakan rekursi. Programmu akan menunjukkan fungsi faktorial rekursif dengan memproses list angka dan menghitung faktorialnya.
- Baca input string yang berisi angka-angka yang dipisahkan dengan koma (misalnya,
"3,5,0,7") - Pisahkan input string menjadi angka-angka terpisah, lalu ubah setiap angka menjadi integer
- Buat fungsi rekursif bernama
factorialyang menerima parameter integern - Fungsi
factorialharus menerapkan logika berikut: - Kasus dasar: Jika
nkurang dari atau sama dengan 1, kembalikan 1 - Langkah rekursif: Kembalikan
ndikalikan denganfactorial(n - 1) - Untuk setiap angka dalam list input, hitung faktorialnya menggunakan fungsi rekursifmu
- Tampilkan hasil yang menunjukkan setiap angka dan faktorialnya
- Hitung dan tampilkan jumlah semua hasil faktorial
Misalnya, jika inputnya "4,3,2", programmu harus menampilkan:
Factorial Calculator
====================
Processing numbers: [4, 3, 2]
====================
Factorial Results:
4! = 24
3! = 6
2! = 2
====================
Sum of all factorials: 32
Calculation completed successfullyJika inputnya "5,0,1", programmu harus menampilkan:
Factorial Calculator
====================
Processing numbers: [5, 0, 1]
====================
Factorial Results:
5! = 120
0! = 1
1! = 1
====================
Sum of all factorials: 122
Calculation completed successfullyJika inputnya "6", programmu harus menampilkan:
Factorial Calculator
====================
Processing numbers: [6]
====================
Factorial Results:
6! = 720
====================
Sum of all factorials: 720
Calculation completed successfullyProgrammu harus menerapkan fungsi factorial rekursif yang memanggil dirinya sendiri dengan nilai yang terus berkurang hingga mencapai kasus dasar. Fungsi ini harus menunjukkan cara rekursi menguraikan perhitungan faktorial menjadi submasalah yang lebih kecil dan serupa. Gunakan interpolasi string untuk memformat hasil faktorial sebagai "$n! = $result". Ingat, menurut definisi matematika, 0! sama dengan 1, dan kasus dasarmu harus menanganinya dengan benar.
Coba sendiri
import 'dart:io';
// TODO: Buat fungsi faktorial rekursifmu di sini
void main() {
// Baca string input yang berisi angka-angka yang dipisahkan koma
String? input = stdin.readLineSync();
// Pisahkan input dan ubah menjadi bilangan bulat
List<int> numbers = input!.split(',').map((str) => int.parse(str.trim())).toList();
// TODO: Tulis kodemu di bawah ini untuk:
// 1. Proses setiap angka menggunakan fungsi faktorialmu
// 2. Hitung jumlah semua faktorial
// 3. Tampilkan hasilnya dalam format yang diminta
print("Factorial Calculator");
print("====================");
print("Processing numbers: $numbers");
print("====================");
print("Factorial Results:");
// TODO: Hitung dan tampilkan hasil faktorial di sini
print("====================");
// TODO: Tampilkan jumlah semua faktorial
print("Calculation completed successfully");
}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