Jumat, 07 April 2017

Laporan Praktikum Struktur Data Modul III Fungsi Rekursi

            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.





1 komentar: