Sabtu, 06 Desember 2014

Faktorial Rekursif C++

Dalam matematikafaktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh, nilai dari 7 faktorial adalah  7*6*5*4*3*2*1= 5040. Berikut merupakan contoh program untuk mencari bilangan faktorial dengan metode rekursif.


#include <iostream>
using namespace std;

int factorial(int);
int main()
{
    int r;
 
    cout<<"masukkan bilangan bulat positif: ";
    cin>>r;
 
    if (r<0)
    cout<<"bukan bilangan bulat";
    else
    cout<<r<<" faktorial adalah: "<<factorial(r)<<endl;
 
    system ("pause");
    return 0;            
}
int factorial(int r) // fungsi faktorial rekursif
{
    int result;
 
    if (r<=1)return 1;
    result=r*factorial(r-1);
    return result;
}


Rekursi adalah suatu proses dari fungsi yang memanggil dirinya sendiri. Disebut juga dengan fungsi rekursif. Dalam sebuah fungsi rekursif pemanggilan dapat terjadi berulang kali hingga ada suatu kondisi yang mengakhiri prosesya.

Pada contoh progam C++  diatas kondisi penghentiannya adalah jika r lebih kecil atau sama dengan 1. Setiap kali fungsi memeanggil dirinya sendiri, nilai dari r dikurangi 1 sehingga nilai r akhirnya menjadi 1 dan proses rekursi akan diakhiri, sehingga fungsi ini akan memanggil dirinya sendiri sebanyak r kali.

Misalkan pada program C++ diatas kita masukan bilangan positif 4 maka proses rekursi yang pertama adalah: result(4*factorial(3)); proses ini akan memanggil kembali fungsi dirinya sendiri dengan mengirimkan nilai 3 sebagai nilai r yang baru. Karena nilai r masih lebih besar dari 1 maka proses rekursi kedua akan dilakukan dengan hasilnya adalah: 3*factorial(2) hingga seterusnya sampai nilai r sama dengan 1. Untuk nilai r sama dengan 1, perintah return (1) akan mengembalikan proses ke bagian yang memanggilnya.

Kekurangan dari fungsi rekursif:
-          Memerlukan lebih banyak memori untuk menyimpan activation record dan variable local.

-          Memerlukan waktu yang lebih banyak untuk menangani activation record.

Tidak ada komentar:

Posting Komentar