Assalamu'alaikum...
Bismillah, setelah mempelajari mengenai rekursif dan contoh
kali ini akan melanjutkan mengenai contoh program faktorial secara rekursif.
Faktorial (!)
dari bilangan asli x adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan x.
contoh :
1! = 1*1 = 1
2! = 1*2 = 2
3! = 1*2*3 = 6
4! = 1*2*3*4 = 24
5! = 1*2*3*4*5 = 120
6! = 1*2*3*4*5*6 = 720
dst...
Jika menggunakan perulangan biasa, dapat dilihat programnya seperti ini :
#include
<iostream>
using
namespace
std
;
void
faktorialPerulangan
(
int
bil
){
int
hasil=
1
;
for
(
int
i =
1
; i <= bil; i++)
{
hasil *= i;
cout<<i;
if
(i != bil)
{
cout<<
'*'
;
}
}
cout<<
'='
<<hasil;
}
int
main
(){
int
bil,hasil=
1
;
cout<<
"Faktorial dengan perulangan for"
<<endl;
cout<<
"Masukan bilangan : "
;cin>>bil;
cout<<bil<<
"! = "
;
faktorialPerulangan
(bil);
}
bandingkan dengan menggunakan rekursif berikut ini :
#include
<iostream>
using
namespace
std
;
int
faktorial
(
int
bil
,
int
hasil
){
if
(bil ==
0
){
//pemberhentian rekursif
cout<<
'='
;
return
hasil;
}
else
{
hasil*=bil;
cout<<bil;
if
(bil !=
1
)
cout<<
'*'
;
//melakukan rekursif
faktorial
(bil-
1
,hasil);
}
}
int
main
(){
int
bil,hasil=
1
;
cout<<
"Faktorial dengan rekursif"
<<endl;
cout<<
"Masukan bilangan : "
;cin>>bil;
cout<<bil<<
"! = "
;
cout<<
faktorial
(bil,hasil);
}
Hasil output kedua program diatas :
Faktorial menggunakan perulangan for |
Faktorial menggunakan fungsi rekursif
|
Kedua program menghasilkan nilai faktorial yang sama, namun susunan bilangannya yang berbeda. Untuk program pertama hanya menggunakan perulanga for (loop for) seperti biasa, sedangkan program kedua menggunakan fungsi rekursif. Parameter yang dilempar kepada kedua fungsi pun berbeda.
Berikut alur program faktorial menggunakan for :
bil= 5
//
cout<<bil<<
"! = "
;
5! =
//
faktorialPerulangan
(bil);
faktorialPerulangan(5)
hasil = 1
iterasi 1 : i= 1
hasil = hasil * i = 1*1 =1
//
cout<<i;
5! = 1
//
if
(i != bil) cout<<'*';
5! = 1*
iterasi 2 : i= 2
hasil = hasil * i = 1*2 =2
//
cout<<i;
5! = 1*2
//
if
(i != bil) cout<<'*';
5! = 1*2*
iterasi 3 : i= 3
hasil = hasil * i = 2*3 =6
//
cout<<i;
5! = 1*2*3
//
if
(i != bil) cout<<'*';
5! = 1*2*3*
iterasi 4 : i= 4
hasil = hasil * i = 6*4 =24
//
cout<<i;
5! = 1*2*3*4
//
if
(i != bil) cout<<'*';
5! = 1*2*3*4*
iterasi 5 : i= 5
hasil = hasil * i = 24*5 =120
//
cout<<i;
5! = 1*2*3*4*5
//
if
(i != bil) cout<<'*';
// i sudah sma dengan bil
5! = 1**2*3*4*5
iterasi selesai
//
cout<<
'='
<<hasil;
5! = 1**2*3*4*5 = 120
Berikut alur program faktorial menggunakan rekursif :
bil = 5;
hasil =1;
//output
cout<<bil<<
"! = "
;
5! =
//
cout<<
faktorial
(bil,hasil);
faktorial(5,1)
menjalankan
else
hasil = 1*5 = 5
//output
cout<<bil;
5! = 5
//
if
(bil !=
1)
cout<<
'*'
;
5! = 5*
//
faktorial
(bil-
1
,hasil);
faktorial (4,5)
menjalankan
else
hasil = 5*4 = 20
//
cout<<bil;
5! = 5*4
//
if
(bil !=
1)
cout<<
'*'
;
5! = 5*4*
//
faktorial
(bil-
1
,hasil);
faktorial (3,20)
menjalankan
else
hasil = 20*3 = 60
//
cout<<bil;
5! = 5*4*3
//
if
(bil !=
1)
cout<<
'*'
;
5! = 5*4*3*
//
faktorial
(bil-
1
,hasil);
faktorial (2,60)
menjalankan
else
hasil = 60*2 = 120
//
cout<<bil;
5! = 5*4*3*2
//
if
(bil !=
1)
cout<<
'*'
;
5! = 5*4*3*2*
//
faktorial
(bil-
1
,hasil);
faktorial (1,120)
menjalankan
else
hasil = 120*1 = 120
//
cout<<bil;
5! = 5*4*3*2*1
//
if
(bil !=
1)
cout<<
'*'
;
5! = 5*4*3*2*1
//
faktorial
(bil-
1
,hasil);
faktorial (0,120)
menjalankan
if
//
cout<<
'='
;
5! = 5*4*3*2*1=
//
return
hasil;
5! = 5*4*3*2*1=120
Nah begitulah kira2 kurang lebih alur dari kedua program faktorial diatas.
Bagaimana sudah paham ?
Semoga bermanfaat. Terimakasih