Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Buat program yang menghitung faktorial beberapa angka menggunakan rekursi. Programmu akan menunjukkan fungsi faktorial rekursif dengan memproses list angka dan menghitung faktorialnya.

  1. Baca input string yang berisi angka-angka yang dipisahkan dengan koma (misalnya, "3,5,0,7")
  2. Pisahkan input string menjadi angka-angka terpisah, lalu ubah setiap angka menjadi integer
  3. Buat fungsi rekursif bernama factorial yang menerima parameter integer n
  4. Fungsi factorial harus menerapkan logika berikut:
    • Kasus dasar: Jika n kurang dari atau sama dengan 1, kembalikan 1
    • Langkah rekursif: Kembalikan n dikalikan dengan factorial(n - 1)
  5. Untuk setiap angka dalam list input, hitung faktorialnya menggunakan fungsi rekursifmu
  6. Tampilkan hasil yang menunjukkan setiap angka dan faktorialnya
  7. 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 successfully

Jika 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 successfully

Jika inputnya "6", programmu harus menampilkan:

Factorial Calculator
====================
Processing numbers: [6]
====================
Factorial Results:
6! = 720
====================
Sum of all factorials: 720
Calculation completed successfully

Programmu 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");
}
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