Assalamu’alaikum
Wr.. Wb.. Hai pada kesempatan kali saya akan membahas sebuah program c++ dimana
di dalammnya program tersebut terdapat sebuah fungsi rekursi. Oke saya akan
memberikan sedikit materi tentang fungsi/functio rekursi agar para pembaca
tidak binggung tentang fungsi rekursi. Rekursif adalah salah satu metode dalam
dunia matematika. Definisinya merupakan sebuah fungsi yang mengandung fungsi
itu sendiri. Dalam dunia pemrograman, rekursif diimplementasikan dalam sebuah
fungsi yang memanggil dirinya sendiri, sehingga terjadilah perulangan didalam
fungsi tersebut. Akan tetapi proses perulangan tersebut terjadi secara
implisit, sehingga pada proses perulangannya tidak menggunakan for, while, atau
do-while.
Dalam fungsi pangkat xy, jika x pangkat 0, maka
nilainya adalah 1. Jika x pangkay y, yang mana y lebih dari 0, maka hasilnya
adalah sama dengan x dikalikan x dipangkatkan y-1.
Dituliskan dalam formula:
formula-rekursif
Perhatikan formula penghitungan pangkat
secara rekursif diatas!! x merupakan sebuah fungsi yang mana fungsi x tersebut
dipanggil pada proses penghitungan pangkatnya.
Oke
langsung saja kita masuk ke study kasus nya.
Study Kasus Praktikum 3.1
Dalam perhitungan matematika dikenal
perpangkatandengan menentukan bilangan dasar yang akan dipangkatkan dan
menentukan pangkat yang akan diterapkan pada bilangan dasar tersebut, bagaimana
perhitungan matematika tersebut jika dibuat kedalam sebuah program.
Script
Study Kasus Praktikum 3.1
#include<stdio.h>
#include<conio.h>
int pangkat(int x, int y);
main()
{
int x,y;
printf(" Masukan Bilangan Yang Akan Dipangkatkan
= ");
scanf("%d",&x);
printf("\n Pangkat Bilangan = ");
scanf("%d",&y);
printf("\n Hasil Bilangan %d Pangkat %d Adalah
%d",x,y,pangkat(x,y));
getch();
return 0;
}
int pangkat(int x, int y)
{
if(y==0)
{
return 1;
}
else
{
return x*pangkat (x,y-1);
}
}
Hasil Running :
Pembahasan
Program
diatas merupakan program perpangkatan dimana dalam program tersebut akan
meminta untuk memasukan sebuah nilai bilangan yang akan di pangkatkan dan
sebuah nilai dari dari pangkat bilangan itu, dan dalam program tersebut
terdapat sebuah fungsi rekursi untuk mencari nilai dari pangkat itu, seperti :
int pangkat(int x, int y)
{
if(y==0)
{
return 1;
}
else
{
return x*pangkat (x,y-1);
}
Jadi nilai x itu sebagai nilai bilangan yang akan
dipangkatkan dan y merupakan pangkat bilangan, jadi jika (y) itu 0 maka hasil
yang akan keluar 1, dan jika (y)nya bukan 0 maka return x*pangkat(x,y-1) jadi x
itu akan dikali dengan nilai function. Contohnya x nya 4 dan y nya 3 maka 4 *
(4,3-1 atau 2) nah jadi 4 * 4 = 16 jika y nya belum 0 maka function itu akan
trus berjalan jadi 16*(4,2-1 atau 1) jadi 16 * 4 = 64, nah setelah itu program
akan mengecek la gi apakah jika y – 1 hasilnya 0 maka function itu akan berenti
si nilai 64.
Study
Kasus Praktikum 3.2
Bilangan
yang ada merupakan runtutan jumlah dari bilangan sebelumnya dengan demikian
kita dapat mengetahui deret bilangan sebelumnya dengan melakukan faktorisasi
dari bilangan tersebut, hasil dari penjumlahan deret bilangan tersebut dapat di
lakukan dengan sebutan faktorial
Contoh 4 difaktorialkan (4!) => 4 3 2 1 : (hasil
kali 4!) = 24.
Script
Study Kasus Praktikum 3.2
#include<iostream.h>
int factorial (int a)
{
if(a>0){
cout<<a<<" ";
return(a*factorial(a-1));
}
else
return 1;
}
int main()
{
int a;
int factorial(int a);
cout<<"program menampilkan deret nilai
faktorial"<<endl;
cout<<"masukan nilai faktorial:";
cin>>a;
cout<<endl;
cout<<"\n\nRekursif-> Hasil Perkalian
semua nilai dari"<<a<<"!= "<<factorial(a);
return 0;
}
Hasil Running :
Pembahasan
Dalam
program tersebut merupakan sebuah program menampilkan deret nilai faktorial dan menampilkan hasil dari
perkalian semua nilai faktorial, jadi dalam program tersebut diharuskan memasukan
nilai yang akan difaktorialkan, setelah itu nilai yang diinput akan masuk
kedalam function (int factorial (int a) ) int a itu merupakan sebuah nilai yang
sebelumnya diinput,setelah itu di dalam function terdapat pengidentifikasian
jika nilai a lebih besar dari 0 (if(a>0) maka proses ini yang akan di
jalankan :
{
cout<<a<<" ";
return(a*factorial(a-1));
}
Jadi return itu hasil function yang akan keluar jika
di panggil dan dalam return terdapat proses yaitu (a*factorial(a-1) maksudnya
adalah contoh a nya itu kita inputkan 4 jadi (4*factorial(4-1) maka 4 * 3,
proses tersebut akan terus berlangsung sampai a nya itu 1, nah jika a nya 1
maka proses yang akan berjalan adalah :
Else
return 1;
untuk melakukan pemanggilan function hanya perlu
memanggil parameter dan daftar parameternya saja seperti : int factorial(int a)
menjadi factorial(a);
Study Kasus Praktikum 3.3
Bilangan
fibonanci adalah bilangan yang melakukan penambahan terhadap dirinya sendiri
dan nilai penjumlahan dari bilangan pada dirinya yang sebelumnya seperti teori
berikut ini : f0 := 0, f1 = 1, fn>2 = fn-1
+ fn-2
F2 = f0 + f1 = 0 + 1
= 1
F3 = f1 + f2 = 1 + 1
= 2
F4 = f2 + f3 = 1 + 2
= 3
F5 = f3 + f4 = 2 + 3
= 5
....
Script
Study Kasus Praktikum 3.3
#include<iostream.h>
#include<conio.h>
int fibo(int i)
{
if(i==0)
return 0;
else if(i==1)
return 1;
else
//fungsi rekrusif
return fibo(i-1)+fibo(i-2);
}
int main()
{
int bil,i;
cout<<"\t Fungsi Rekrusif Bilangan
Fibonaci"<<endl;
cout<<"\t==================================="<<endl;
cout<<"\nMasukan bilangan:";
cin>>bil;
//pemanggilan nilai fibonaci
for(i=1; i<=bil;i++)
//cout<<" "<<fibo(i);
cout<<"\n
Fibonaci("<<bil<<")="<<fibo(bil);
getch();
return 0;
}
Hasil Running :
Pembahasan
Program
di atas merupakan sebuah program mencari deret fibonanci, jadi pertama – tama
masukan bilangan sebagai pembatas dari fibonanci contohnya 5, setelah itu 5 itu
akan masuk kedalam function dalam function tersebut terdapat if else jadi jika
nilai tersebut benar dengan salah satu kondisi if maka proses itu yang di jalan
kan, tadi saya mengambil contoh 5 maka else yang akan di jalan kan, jadi return
(i-1) + fibo (i-2) atau return(5-1) + (5-2) maka fibo(4) + fibo(3) maksud dari
4 + 3 ini bukan 7 hasilnya tetapi fibonanci 4 berapa dan fibonanci 3 brapa
kemudian di tambahkan, proses ini akan trus berjalan sampai i itu 2 jika i = 1
maka else if yang di jalankan dan jika i = 0 maka if yang akan di jalankan, nah
dalam function itu memprosesnya mundur jadi dri 5 ke 0 maka saat pemanggilan
function tinggal harus menggunakan intruksi for dengan mengincrement (i++) kan
nilainya contoh for(i=1; i<=bil;i++)
Study
Kasus Latihan 3.1
Program berikut ini
berfungsi untuk membalikan urutan deret bilangan yang diinput menggunakan
fungsi rekursi
Contoh : 12345678
=> 87654321
Perhatikan fungsi
membandingkan bilangan sebelum dan berikutnya
Script
Study Kasus Latihan 3.1
#include<stdio.h>
#include<conio.h>
#define MAX 100
void
rekursif_angka_terbalik(int);
main()
{
int i,j,jml=0;
char bil[MAX];
printf("\nProgram
Pembalik Angka\n");
printf("\nMasukan
bilangan yang dibalik kawan = ");
gets(bil);
for (i=0;bil[i];i++)
{
jml=jml++;
}
printf("\n");
printf("Maka
hasilnya adalah= ");
for(j=jml-1;j>=0;j--)
{
printf("%c",bil[j]);
}
printf("\n");
getch();
return 0;
}
Hasil Running :
Pembahasan
Pertama – tama masukan bilangan yang
akan dibalik dengan menggunakan variable array, array ini berguna untuk
menampung nilai yang begitu banyak, setelah nilai di masukan , masukan pengulangan
untuk menyamakan nilai jumlah dengan nilai yang diinputkan, untuk mengetaui
hasil pembalikan atau rotasi nilainya gunakan intruksi for atau pengulangan
for(j=jml-1;j>=0;j--)
{
printf("%c",bil[j]);
}
Jadi for ini
digunakan untuk mengulang nilai yang di masukan tapi nilai yang akan keluar
adalah nilai yang diinputkan terakhir sampai awal, karena dalam for terdapat
decrement jadi outputnya dari nilai terakhir trus berkurang sampai nilai pertama.
Study
Kasus Latihan 3.2
Deret fiboanci adalah
deret unik yang dapat dirumuskan dalam rumus matematika sederhana bagaimana
membuat menampilkan deret fibonanci dengan memberikan batasan akhir dari sebuah
angka fibonanci dengan menggunakan statement #define variable.
Script
Study Kasus Latihan 3.2
#include<iostream.h>
#include<conio.h>
#define MAX 5
int main()
{
int i;
long fibo[MAX];
fibo[1]=1;
fibo[2]=1;
for(i=3;i<=MAX;i++)
{
fibo[3]=fibo[1]+fibo[2];
fibo[1]=fibo[2];
fibo[2]=fibo[3];
cout<<fibo[3]<<endl;
}
getch();
return 0;
}
Hasil Running :
Pembahasan
Jadi dalam program di
atas adalah menampilkan deret fibonanci dan fibonanci yang akan di tampilkan dampai
5, nah dalam fibonanci rumusnya seperti ini untuk fibo[0] = 0 dan untuk fibo[1]
= 1, dan untuk menghitung fibo slanjutnya dengan cara menambahkan fibonanci
sbelum urutan tersebut jadi fibo[2]=fibo[0] + fibo [1] hasilnya 1 dan untuk
fibo[3]= fibo[1] + fibo[2] hasilnya 2, dan untuk fibo seterusnya.
Study
Kasus Latihan 3.3
Dalam
perhitungna matematka dikenal perpangkatan dengan menentukan bialangan dasar
yang akan dipangkatkan dan menentukan pangkat yang akan di tetapkan pada
bilangan dasar tersebut, bagaimana perhitungan matematika tersebut jika dibuat
kedalam sebuah program yang dapat menampilkan deret nilai yang dipangkatkan
tersebut. Contoh 32 => 9
Script
Study Kasus Latihan 3.3
#include<stdio.h>
#include<conio.h>
int pangkat(int x, int y);
main()
{
int x,y;
printf(" Masukan Bilangan Yang Akan Dipangkatkan
= ");
scanf("%d",&x);
printf("\n Pangkat Bilangan = ");
scanf("%d",&y);
printf("\n Hasil Bilangan %d Pangkat %d Adalah
%d",x,y,pangkat(x,y));
getch();
return 0;
}
int pangkat(int x, int y)
{
if(y==0)
{
return 1;
}
else
{
return x*pangkat (x,y-1);
}
}
Hasil Running :
Pembahasan
Program diatas merupakan program perpangkatan dimana
dalam program tersebut akan meminta untuk memasukan sebuah nilai bilangan yang
akan di pangkatkan dan sebuah nilai dari dari pangkat bilangan itu, dan dalam
program tersebut terdapat sebuah fungsi rekursi untuk mencari nilai dari
pangkat itu, seperti :
int pangkat(int x, int y)
{
if(y==0)
{
return 1;
}
else
{
return x*pangkat (x,y-1);
}
Jadi nilai x itu sebagai nilai bilangan yang akan
dipangkatkan dan y merupakan pangkat bilangan, jadi jika (y) itu 0 maka hasil
yang akan keluar 1, dan jika (y)nya bukan 0 maka return x*pangkat(x,y-1) jadi x
itu akan dikali dengan nilai function. Contohnya x nya 3 dan y nya 2 maka 3 * (3,2-1
atau 1) nah jadi 3 * 3 = 9 jika y nya belum 0 maka function itu akan trus
berjalan.
Nah
itu lah program – program yang memakai fungsi rekursi, oke mungkin sampai disini dahulu artikel yang dapat saya posting
pada saat ini, semoga postingan ini dapat bermanfaat bagi kalian semua. Jangan lupa
ya jika
kalian mempunyai kritik dan saran silahkan tambahkan pada kolom komentar.
Terima kasih atas kunjungan kalian.







Sudah Diperiksa
BalasHapus