Menghitung Faktorial Dengan Bahasa C
Menghitung Faktorial merupakan contoh favorit yang sering diberikan dalam rangka membahas fungsi rekursif. Fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri. Jadi di dalam fungsi tersebut terdapat suatu baris program yang memanggil dirinya sendiri. Perhatikan contoh pada listing 1.
Listing 1. Contoh fungsi rekursif
main()
{
…
…
}
fungsiX()
{
…
…
fungsiX()
…
}
|
Satu hal yang harus diperhatikan adalah proses rekursi tersebut akan terjadi secara berulang-ulang, sehingga di dalam fungsi yang bersifat rekursif tersebut harus diberi suatu kondisi sedemikian rupa yang dapat mengakhiri proses rekursi.
Lalu, apa pula faktorial itu? Faktorial adalah perkalian suatu bilangan bulat N dengan N-1, N-2, dan seterusnya hingga 0.
Kalau begitu hasilnya selalu 0 dong, khan semua bilangan jika dikalikan dengan 0 adalah 0. Pada faktorial yang terjadi tidaklah demikian, karena ada perjanjian bahwa nilai faktorial 0 adalah 1, bukan 0.
Suatu faktorial dilambangkan dengan tanda seru (!) dan mengikuti rumus sebagai berikut:
N! = N x (N-1) x (N-2) x … x 0
Dalam bentuk lain, rumus di atas bisa dituliskan sebagai berikut:
N! = N x (N-1)!
Nah, program bahasa C yang digunakan untuk menghitung faktorial diberikan pada listing 2.
Listing 2. Menghitung faktorial
#include <stdio.h>
long int faktorial(int N);
main()
{
long int f;
int n;
clrscr();
printf(“Program Menghitung Faktorial \n \n”);
printf(“Masukkan suatu bilangan bulat : “);
scanf(“%d”,&n);
if (n<0)
{
printf(“Bilangan harus positif!”);
} else {
f = faktorial(n);
printf(“Nilai %d! adalah : %ld”, n, f);
}
}
long int faktorial(int N)
{
long int F;
if (N<=1)
{
return(1);
} else {
F = N * faktorial(N-1);
return(F);
}
}
|
Jika program tersebut dijalankan, hasilnya adalah sebagai berikut:
Program Menghitung Faktorial
Masukkan suatu bilangan bulat : 5
Nilai 5! adalah : 120
Bandingkan dengan gambar 1.
Alur program tersebut adalah sebagai berikut:
- Deklarasi variabel.
- Input bilangan yang akan difaktorial.
- Pemeriksaan kondisi, jika bilangan kurang dari nol, maka muncul peringatan, jika bilangan lebih besar atau sama dengan nol, maka fungsi faktorial() dipanggil.
Sementara itu di dalam fungsi faktorial() sendiri alurnya adalah sebagai berikut:
- Deklarasi variabel.
- Pemeriksaan kondisi, jika nilai bilangan kurang dari atau sama dengan 1, maka fungsi faktorial() akan menghasilkan nilai balik 1, jika nilai bilangan lebih dari 1, maka dihitung nilai faktorialnya. Perhitungan nilai faktorial mengikuti rumus N! = N x (N-1)!. Karena itu di dalam fungsi faktorial() ini dipanggil lagi fungsi faktorial() namun sekarang nilai argumennya adalah N-1.
Untuk membantu Anda dalam membayangkan alur tersebut, lihat bagan seperti terlihat pada gambar 2.
Dengan memanfaatkan program faktorial di atas, kita bisa membuat suatu program lain yang juga bermanfaat, seperti misalnya program untuk menghitung permutasi dan kombinasi. Permutasi dan kombinasi merupakan proses perhitungan yang kerap dilakukan di bidang ilmu statistik. Rumus perhitungan permutasi dan kombinasi dapat dilihat pada gambar 3. Huruf P menunjukkan permutasi dan huruf C menunjukkan kombinasi. Huruf n dan r mewakili bilangan bulat positif dengan n >= r.
Berdasarkan rumus tersebut, kita akan membuat program untuk menghitung permutasi dan kombinasi. Program tersebut diberikan pada listing 3.
Listing 3. Menghitung permutasi dan kombinasi
#include <stdio.h>
long int faktorial(int N);
main()
{
long int hasil;
int n,r;
char proses;
clrscr();
printf(“Program Menghitung Permutasi atau Kombinasi \n”);
printf(“nPr atau nCr \n \n”);
printf(“Masukkan nilai n : “);
scanf(“%d”,&n);
printf(“Masukkan nilai r : “);
scanf(“%d”,&r);
if (n<r) {
printf(“Nilai n tidak boleh lebih kecil dari r”);
} else {
printf(“Pilih P (permutasi) atau C (kombinasi) : “);
proses = getche();
if (proses==’p’ | proses==’P')
{
hasil = faktorial(n)/faktorial(n-r);
printf(“\n \n”);
printf(“%dP%d = %ld”,n,r,hasil);
}
else if (proses==’c’ | proses==’C')
{
hasil = faktorial(n)/(faktorial(r) * faktorial(n-r));
printf(“\n \n”);
printf(“%dC%d = %ld”,n,r,hasil);
}
else
{
printf(“\nAnda tidak memilih P atau C”);
}
}
}
long int faktorial(int N)
{
long int F;
if (N<=1)
{
return(1);
} else {
F = N * faktorial(N-1);
return(F);
}
}
|
Jika program tersebut dijalankan, salah satu kemungkinan hasilnya adalah sebagai berikut:
Program Menghitung Permutasi atau Kombinasi
nPr atau nCr
Masukkan nilai n : 5
Masukkan nilai r : 3
Pilih P (permutasi) atau C (kombinasi) : p
5P3 = 60
Bandingkan dengan gambar 4.
Anda bisa mengembangkan sendiri program di atas, misalnya diberi looping untuk memberi kesempatan pengguna melakukan perhitungan ulang setelah sebuah perhitungan selesai dilakukan.
Selamat mencoba.