Anda di halaman 1dari 5

Contoh Penggunaan Fungsi Rekursif pada C++ untuk

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.

Membuat Program Mencari Faktorial Dengan Bahasa C++

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>

using namespace std;

int fakt(int a);


int main()

{int z,x;

cout << "Masukkan angka = "; cin >> z;

cout << "Deretnya = ";

for (x=z+1; x>1; x--)

{cout << x-1 << "x";}

cout << "\nHasil = " << fakt(z)<< endl;

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 :

Output Program Rekursif dengan C++


Yah, mungkin itu yang dapat saya bagikan kali ini, terimakasih telah berkunjung, jangan lupa
bookmarks dan share ya.
Fungsi rekursif adalah function yang memanggil dirinya sendiri secara
langsung maupun tidak langsung melalui function yang lain. Setiap function rekursif
mengandung 2 hal :
a. kasus yang paling sederhana atau kasus basis. Di dalamnya akan
mengembalikan suatu nilai
b. langkah rekursi (recursive call), di mana masalah yang kompleks dipecah
menjadi masalah yang lebih sederhana. Langkah rekursif ini harus
mengarah ke kasus basis.
Sebagai contoh adalah program untuk mencari nilai dari n! dengan n bilangan integer
non negatif. n! didefinisikan sebagai : (iteratif)
n! = n*(n-1)*(n-2)* ... * 1
dengan 1!=1 dan 0!=1. Persoalan ini dapat diselesaikan dengan cara iteratif
menggunakan pernyataan for. Misalkan akan dicari n!

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;
}

Pada kasus perulangan iteratif di atas, kita dapat menggunakan pernyataan


perulangan while atau do .. while sebagai ganti for (5). Nilai kumulatif perkalian
dimulai dari 1 (4) dan pernyataan kumulatif nilai perkalian menggunakan (6) [
Silahkan merujuk diktat Algoritma dan Pemrograman ]. Nilai hasil dikembalikan
sebagai hasil dari fungsi Factorial (7).
Untuk kasus perulangan rekursif, nilai awal dapat kita pandang sebagai kasus
basis yang nantinya akan mengembalikan suatu nilai (4). Sementara sifat
pengulangannya menggunakan pemanggilan dirinya sendiri (5). Tentu saja rumus yang
digunakan disesuaikan dengan kasus yang dihadapi.

#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; }

Output dari program di atas untuk n = 5 adalah


Faktorial 5 = 1201. Fungsi Rekursif dua parameter : Perkalian Dua Buah IntegerDefinisi iteratif untuk
kasus perkalian dua buah integer adalah sebagai berikut :
Definisi : (iteratif)
a x b = a + a + ... + a (b kali), untuk b > 0 (-a) + (-a) + ... + (-a) (b kali), untuk b < 0Dalam definisi di atas
dapat dilihat bahwa perulangan selalu dipertahankan bernilai
positif, terutama untuk kasus b yang negatif, yaitu dengan cara mengalihkan nilai
negatif ke a. Implementasi definisi tersebut menggunakan fungsi sebagai berikut :

#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>

int kali_rekursif(int a,int b)


{
if (b==0)
return 0; // kasus basis
else if (b>0)
return a + kali_rekursif(a,b-1); // pemanggilan rekursif
else
return (-a) + kali_rekursif(a,b+1); // pemanggilan rekursif
}
void main(void)
{
cout << "3x(-5) = " << kali_rekursif(3,-5) << endl;
}

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).

Anda mungkin juga menyukai