Mencari Faktoria
Sumber : Google
Selamat Datang Kembali di Blog saya yang apa adanya ini. Kali ini saya akan mengaplikasikan
pembuatan program untuk menyelesaikan perhitungan matematika dengan menggunakan fungsi
rekursif. Ohiya, jika kalian belum mengerti apa itu fungsi rekursif, silahkan baca Pengertian Fungsi
Rekursif agar kalian tidak bingung.Baiklah silahkan simak artikel kali ini.
Persoalan
Seperti yang kita ketahui, biasanya kita membuat program untuk menyelesaikan suatu kasus atau
masalah tertentu, tentunya untuk mempermudah kita saat melakukan hal tersebut. maka dari itu,
walaupun ini sudah mainstream, tetapi apa salahnya untuk mengulangnya lagi, permasalahan yang
saya ambil disini adalah untuk mencari Faktorial. Kenapa saya memilih masalah tersebut? karena
pengaplikasian fungsi rekursif sendiri sebenarnya tidak banyak, namun hanya pada beberapa kasus
saja.
Seperti yang kita ketahui, rumus untuk mencari faktorial adalah "n! = (n-1)*(n-2) ...” contoh
"faktorial dari 5 adalah 5*4*3*2*1 atau hasilnya adalah 120". dimana dalam kasus ini, angka
bersifat bulat. Dari rumus tersebut, dapat kita rumuskan algoritmanya yaitu jika angka yang
diinputkan adalah n maka hasilnya adalah penjumlahan dari hasil = (n-1)*(n-2)... perhatikan
listing program berikut ini :
#include <iostream>
{int z,x;
int fakt(int a)
if (a<=1)
a=1;
else
a=a*(fakt(a-1));
return (a);
Pada program di atas, fungsi rekursif terletak pada kode berwarna hijau, dimana void fakt(int a)
mempunyai statement untuk memanggil dirinya sendiri didalam fungsinya. Sehingga kira-kira
beginilah hasil outputnya :
faktorial = 1;
for (int i=1; i<= n; i++)
faktorial = faktorial * i;
Definisi faktorial bisa ditulis dengan relasi : (rekursif)
n! = n * (n-1)!
yang ditulis sebagai
faktorial := n * faktorial(n-1);
Perhatikan evaluasi rekursif dari 4! di bawah ini.
#include <iostream.h>
int Factorial(int n)
{
int i, hasil = 1;
for (i=1; i<=n; i++)
hasil = hasil * i;
return hasil;
}
void main(void)
{
cout << "5! = " << Factorial(5) << endl;
}
#include <iostream.h>
int Factorial(int n)
{
if (n <= 1) return 1; // kasus basis
else return n * Factorial(n - 1); // pemanggilan rekursif
}
void main(void)
{ cout << "5! = " << Factorial(5) << endl; }
#include <iostream.h>
#include <math.h>
int kali_iteratif(int a,int b)
{
int i, hasil = 0; // nilai awal
for (i=1; i<=abs(b); i++)
hasil = hasil+a;
if (b<0) return -hasil;
else return hasil;
}
void main(void)
{
cout << "3x(-5) = " << kali_iteratif(3,-5) << endl;
}
Fungsi absolut (abs) digunakan untuk perulangan yang selalu positif (7).
Fungsi abs prototipe fungsinya berada pada math.h (2). Sementara bila b bernilai
negatif, kita bisa menggunakan nilai negatif dari perhitungan semula untuk b positif
(9). Dalam implementasi menggunakan fungsi rekursif, nilai awal pada kasus iteratif
digunakan sebagai kasus basis (penyetop). Sementara dua kasus yang ada pada
definisi iteratif digunakan dan dimodifikasi untuk kasus rekursif. Definisi rekursif
dari kasus perkalian dua integer adalah sebagai berikut :
Definisi : (rekursif)
a x b = 0, untuk b = 0 a + (a x (b-1)), untuk b > 0 -a + (a x (b+1)), untuk b < 0Implementasi dari definisi
rekursif di atas adalah sebagai berikut :
#include <iostream.h>
Pada kasus rekursif yang pertama, nilai b positif. Untuk mengarah pada kasus
basis (b = 0) maka nilai b selalu dikurangi dengan 1 (8). Sementara untuk kasus
rekursif yang kedua (b < 0), untuk mengarah pada kasus basis (b = 0) nilai b
ditambah dengan 1 (10).