Dalam latihan kode program bahasa Pascal kali ini kita akan membahas cara membuat fungsi rekursif untuk menghitung faktorial.
Soal Fungsi Rekursif untuk Menghitung Faktorial
Buatlah kode program dalam bahasa Pascal dalam bentuk fungsi rekursif untuk menghitung faktorial. Kode program menerima satu inputan angka dan menghasilkan jumlah faktorial.
Bonus: Buat juga versi dengan fungsi biasa (non-rekursif)
Berikut hasil yang di inginkan (1):
## Program Pascal Menghitung Faktorial ## =========================================== Input angka: 6 6! = 720
Berikut hasil yang di inginkan (2):
## Program Pascal Menghitung Faktorial ## =========================================== Input angka: 12 12! = 479001600
Tips Membuat Fungsi Rekursif
Dalam programming, fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Untuk beberapa kasus, fungsi rekursif bisa lebih efisien, tapi penulisannya memang tidak mudah dan sering terjadi error / infinity loop.
Selain itu tidak semua masalah bisa dipecahkan dengan fungsi rekursif, menghitung faktorial menjadi contoh penerapan yang banyak dipakai untuk membuat fungsi rekursif.
Soal ini melatih pemahaman terkait logika matematika serta pembuatan function. Berikut tutorial pendahuluan yang bisa diikuti:
- Pengertian Variabel dalam Bahasa Pascal
- Cara Penggunaan Perintah Read dan Readln
- Pengertian Tipe Data Integer Pascal
- Operator Aritmatika Pascal
- Perulangan FOR DO Pascal
Dalam matematika, faktorial adalah hasil perkalian menaik dan ditulis dengan tanda seru " ! ". Sebagai contoh, 4 faktorial ditulis dengan 4!, dan nilainya adalah 1 * 2 * 3 * 4 = 24, atau 7 faktorial ditulis dengan 7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040.
Kode Program Bahasa Pascal Fungsi Rekursif untuk Menghitung Faktorial
Berikut salah satu solusi kode program fungsi rekursif untuk menghitung faktorial dengan bahasa Pascal:
program menghitung_faktorial; uses crt; var angka: integer; function hitungFaktorial(input:integer):qword; begin if (input > 1) then hitungFaktorial := input * hitungFaktorial(input-1) else hitungFaktorial := 1; end; begin clrscr; writeln('## Program Pascal Menghitung Faktorial ##'); writeln('==========================================='); writeln; write('Input angka: '); readln(angka); writeln(angka,'! = ', hitungFaktorial(angka)); readln; end.
Untuk membaca kode program yang melibatkan function, sebaiknya mulai dari kode utama terlebih dahulu agar kita bisa melihat bagaimana fungsi tersebut dipanggil.
Di dalam kode utama, pada baris 21 kode program akan meminta inputan dari user, yakni angka yang akan dihitung faktorialnya. Angka tersebut disimpan ke dalam variabel angka.
Kemudian di baris 23 terdapat pemanggilan fungsi hitungFaktorial(angka). Disini angka dikirim sebagai argument dari fungsi hitungFaktorial().
Pendefinisian fungsi hitungFaktorial() ada di baris 6-12. Fungsi ini menerima nilai inputan ke dalam parameter input.
Di dalam fungsi hitungFaktorial(), terdapat kondisi if untuk memeriksa apakah parameter input bernilai lebih dari 1 atau tidak. Jika iya, jalankan perintah hitungFaktorial := Â input * hitungFaktorial(input-1)
. Inilah yang dimaksud dengan rekursif, dimana fungsi ini memanggil dirinya sendiri.
Jika ternyata kondisi if(input > 1) bernilai false, maka fungsi hitungFaktorial() akan mengembalikan angka 1.
Fungsi faktorial akan mengembalikan angka dengan tipe data qword. Qword adalah tipe data integer terbesar dalam bahasa Pascal. Tipe data ini sanggup menampung angka 0 hingga 18446744073709551615. Jika menggunakan tipe data integer, maka angka maksimal hanya 32767 atau 2147483647 (tergantung jenis compiler).
Kode Program Pascal Menghitung Faktorial (dengan Fungsi Biasa)
Memahami cara kerja fungsi rekursif memang cukup sulit. Dalam prakteknya, saya pribadi juga sangat jarang menggunakan fungsi rekursif. Lebih baik tulis dalam fungsi biasa saja agar lebih mudah dipahami.
Sebagai alternatif, berikut kode program mencari faktorial menggunakan fungsi biasa (tanpa rekursif):
program menghitung_faktorial; uses crt; var angka: integer; function hitungFaktorial(input:integer):qword; var hasil: qword; i: integer; begin hasil := 1; for i := 1 to input do begin hasil := hasil * i; end; hitungFaktorial := hasil; end; begin clrscr; writeln('## Program Pascal Menghitung Faktorial ##'); writeln('==========================================='); writeln; write('Input angka: '); readln(angka); writeln(angka,'! = ', hitungFaktorial(angka)); readln; end.
Di dalam fungsi hitungFaktorial(), kali ini cukup memakai perulangan for untuk menghitung faktorial.
Perulangan akan dimulai dari i:=1 hingga input. Dalam setiap iterasi, hitung hasil perkalian angka dan simpan ke dalam variabel hasil. Terakhir, variabel hasil inilah yang di-return agar nilainya sampai ke kode program utama.
Agar angka yang dikembalikan bisa lebih besar, saya juga memamakai tipe data qword untuk variabel hasil.
Itulah kode program membuat fungsi rekursif (dan tanpa rekursif) untuk menghitung faktorial dalam bahasa Pascal. Semoga bisa bermanfaat.