Modul-II-Rekursif

4
 Modul Praktikum Algoritma & Pemrograman II  Versi/Revisi : 0/1 Halaman : 2-1 MODUL II REKURSIF 2.1 TUJUAN MODUL Tujuan modul ini, adalah : 1. Memperkenalkan teknik dan teknik pemrograman secara rekursif dalam perangkat lunak bahasa pemrograman C++. 2. Mempraktekkan dan membuktikan teknik pemrograman secara rekursif secara teori di kuliah dengan hasil program yang dibuat di praktikum. 3. Memahami fungsi atau kegunaan dari masing-masing teknik dan pemrosesan rekursif. 2.2 TEORI 2.2.1 Pendahuluan Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnya terkandung pengertian pro sedur atau fungsi. Perbeda annya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi. Rekursif merupakan teknik pemrograman yang penting, dan beberapa bahasa pemrograman modern mendukung keberadaan proses rekursif ini. Pemanggilan prosedur atau fungsi ke dirinya sendiri bisa berarti proses yang berulang yang tidak bisa diketahui kapan akan berakhir. Dalam pemakaian sehari-hari, rekursi merupakan teknik pemrograman yang berdaya guna untuk digunakan pada pekerjaan pemrograman dengan mengeksperisikannya ke dalam suku-suku dari program lain dengan menambahkan langkah- langkah sejenis. Contoh paling sederhana dari proses rekursi adalah menghitung nilai faktorial dari bilangan bulat. Nilai faktorial, secara rekursif dapat ditulis sebagai : 0! = 1 N! = N x (N -1)!, Untuk N > 0 yang secara notasi pemrograman bisa ditulis sebagai: FAKTORIAL (0) = 1 1) FAKTORIAL (N) = N * FAKTORIAL (N-1) 2) Persamaan 2) di atas merupakan contoh hubungan rekurens ( recurrence relation ), yang berarti bahwa nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang lebih kecil. Persamaan 1) yang tidak bersifat rekursif, disebut nilai awal. Setiap fungsi rekursi paling sedikit mempuyai 1 (satu) nilai awal; jika tidak, fungsi tersebut tidak bisa dihitung secara eksplisit. 2.2.2 Proses Rekursif Untuk memahami proses rekursif yang terjadi dalam sebuah fungsi rekursif, perhatikan contoh sederhana di bawah ini. Contoh di bawah ini menyajikan satu fungsi untuk menghitung harga pangkat suatu nilai bilangan bulat misalnya 3 5 , berdasarkan hubungan rekurens seperti dijelaskan diatas, maka proses rekursif akan tampak pada gambar berikut ini :

Transcript of Modul-II-Rekursif

Page 1: Modul-II-Rekursif

5/17/2018 Modul-II-Rekursif - slidepdf.com

http://slidepdf.com/reader/full/modul-ii-rekursif 1/4

 

Modul Praktikum Algoritma & Pemrograman II

IF-UTAMA Versi/Revisi : 0/1 Halaman : 2-1

MODUL II

REKURSIF

2.1  TUJUAN MODUL

Tujuan modul ini, adalah :1.  Memperkenalkan teknik dan teknik pemrograman secara rekursif dalam perangkat lunak

bahasa pemrograman C++.2.  Mempraktekkan dan membuktikan teknik pemrograman secara rekursif secara teori di

kuliah dengan hasil program yang dibuat di praktikum.3.  Memahami fungsi atau kegunaan dari masing-masing teknik dan pemrosesan rekursif.

2.2  TEORI

2.2.1  Pendahuluan

Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnyaterkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa rekursif bisamemanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi. Rekursif merupakan teknik pemrograman yang penting, dan beberapa bahasapemrograman modern mendukung keberadaan proses rekursif ini.

Pemanggilan prosedur atau fungsi ke dirinya sendiri bisa berarti proses yang berulang yangtidak bisa diketahui kapan akan berakhir. Dalam pemakaian sehari-hari, rekursi merupakan teknikpemrograman yang berdaya guna untuk digunakan pada pekerjaan pemrograman denganmengeksperisikannya ke dalam suku-suku dari program lain dengan menambahkan langkah-langkah sejenis. Contoh paling sederhana dari proses rekursi adalah menghitung nilai faktorial dari

bilangan bulat. Nilai faktorial, secara rekursif dapat ditulis sebagai :0! = 1N! = N x (N-1)!, Untuk N > 0

yang secara notasi pemrograman bisa ditulis sebagai:FAKTORIAL (0) = 1 1)FAKTORIAL (N) = N * FAKTORIAL (N-1) 2)

Persamaan 2) di atas merupakan contoh hubungan rekurens (recurrence relation), yangberarti bahwa nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang samadengan argumen yang lebih kecil. Persamaan 1) yang tidak bersifat rekursif, disebut nilai awal.Setiap fungsi rekursi paling sedikit mempuyai 1 (satu) nilai awal; jika tidak, fungsi tersebut tidakbisa dihitung secara eksplisit.

2.2.2  Proses Rekursif 

Untuk memahami proses rekursif yang terjadi dalam sebuah fungsi rekursif, perhatikancontoh sederhana di bawah ini. Contoh di bawah ini menyajikan satu fungsi untuk menghitungharga pangkat suatu nilai bilangan bulat misalnya 35, berdasarkan hubungan rekurens sepertidijelaskan diatas, maka proses rekursif akan tampak pada gambar berikut ini :

Page 2: Modul-II-Rekursif

5/17/2018 Modul-II-Rekursif - slidepdf.com

http://slidepdf.com/reader/full/modul-ii-rekursif 2/4

 

Modul Praktikum Algoritma & Pemrograman II

IF-UTAMA Versi/Revisi : 0/1 Halaman : 2-2

Gambar 2.1 Ilustrasi Penghitungan pangkat secara rekursif 

Dari definisi tersebut, statemen pertama menunjukkan nilai yang utama dari fungsi, dan statemen

kedua menunjukan perulangan penurunan dari n yaitu n-1.Selain fungsi, prosedur juga dapat dilakukan operasi rekursif. Sebagai contoh penggunaanproses rekursif pada prosedur adalah prosedur pencarian biner (binary search). Dalam beberapahal rekursif kurang efisien dibandng proses iterasi. Dalam artian pemecahan secara rekursif dansecara iterasi mempunyai keuntungan dan kekurangan yang bisa saling diperbandingkan. Adalahcukup sulit untuk menentukan mana yang paling sederhana, paling jelas, paling efisien dan palingmudah dibanding yang lain. Bisa ditambahkan, pemilihan secara iteratif maupun rekursif bolehdikatakan merupakan kesenangan seorang programmer sesuai dengan keinginannya.

Tabel 2.1. Algoritma & Program Berdasarkan Gambar 2.1

Algoritma Bahasa C atau C++Judul : Algoritma Pangkat

secara rekursif

Kamus :

X,Y : Integer

Algoritma:

{fungsi pangkat secara

rekursif}

FUNCTION

Pangkat(X:Integer,Y:Integer)

Integer

IF Y = 0 THEN

Pangkat 1

ELSE

PangkatX * Pangkat(X,Y-

1)

ENDIF

END FUNCTION

{Bagian Pemanggil}

INPUT X, Y

OUTPUT Pangkat(X,Y)

//Program Pangkat secara

rekursif

#include <stdio.h>

#include <stdlib.h>

int X,Y;

// fungsi pangkat secara

rekursif

long int Pangkat(int X, int Y){

if(Y==0){

return 1;

else{

return X * Pangkat(X,Y--);

}

}

int main(){

scanf(“%d %d”, &X, &Y);

printf(“%d pangkat %d =

%ld\n”,X,Y,Pangkat(X,Y));

system(“pause”);

return 0;

}

2.3  TUGAS PENDAHULUAN IV 1. 

Jelaskan teknik pemrograman rekursif !2.  Jelaskan Perbandingan Rekursif dan Iterasi ! 

24381333345

=×=×=

8127333334

=×=×=

2793333 23=×=×=

93333312

=×=×=

31333301

=×=×=

130=  

Page 3: Modul-II-Rekursif

5/17/2018 Modul-II-Rekursif - slidepdf.com

http://slidepdf.com/reader/full/modul-ii-rekursif 3/4

 

Modul Praktikum Algoritma & Pemrograman II

IF-UTAMA Versi/Revisi : 0/1 Halaman : 2-3

3.  Buatlah algoritma dengan teknik rekursif untuk menyelesaian masalah (beserta output-nya) berikut : a. Mencari Permutasi suatu katab.  Membuat segi tiga Pascal, dengan syarat

C(n,0) = 1 dan C(n,n) = 1 untuk n>=0C(n,k)=C(n-1,k)+C(n-1,k-1) untuk n>k>0Kemudian konversi algoritma tersebut ke dalam bahasa C/C++ dengan menggunakantemplate program 2-1 di bawah ini

4.  Buat program di bawah ini, dan lengkapi dengan hasil konversi algoritma pada nomor 3ke dalam bahasa C/C++.

Program 2-1//fungsi untuk menghitung factorial secara rekursif

long int Faktorial(int N){

if(N==0) return 1;

else return N*Faktorial(N-1);

//prosedur untuk ……………(a)

void Tower_Hanoi(int CakramGerak, int CakramKe, char TiangA, char

TiangB, char TiangC) {

if (CakramKe>0) {

Tower_Hanoi (CakramGerak,CakramKe-1,TiangA,TiangC,TiangB);

CakramGerak++;

cout<<"Pindahkan Cakram Nomor : "<<CakramKe<<" dari Tiang

"<<TiangA<<" ke Tiang "<<TiangC<<" ["<<TiangA<<" -->

"<<TiangC<<"]"<<endl;

Tower_Hanoi (CakramGerak,CakramKe-1,TiangB,TiangA,TiangC);}

}

//prosedur untuk ……………(b)

void CariGheto(int A[10], int Awal, int Akhir, int Tengah, int

Data_Cari, int Ketemu){

if (Awal > Akhir) {

Ketemu := 0;}

else

{

Tengah := (Awal + Akhir) div 2;

if (Data_Cari < A[Tengah]){

CariGheto (A, Awal, Tengah – 1, Tengah, Ketemu);}

else { if (Data > A[Tengah]) {

CariGheto (A,Tengah + 1, Akhir, Tengah, Ketemu);}

else { Ketemu := 1;}

}

//prosedur input data dalam array A[10]

void InputGheto(int A[10],int N){

for(int i=0;i<=10;i++){ scanf(”%d”,&a[i]);}

}

//bagian pemanggil/program utama

int main(){

int pilih;

printf(”1. Hitung N!\n”);

printf(”2. Tower of Hanoi\n”);

printf(”3. Pencarian\n”);

printf(”4. Permutasi\n”);//kasus no 3a

printf(”5. Segitiga Pascal\n”);//kasus no3b

Page 4: Modul-II-Rekursif

5/17/2018 Modul-II-Rekursif - slidepdf.com

http://slidepdf.com/reader/full/modul-ii-rekursif 4/4

 

Modul Praktikum Algoritma & Pemrograman II

IF-UTAMA Versi/Revisi : 0/1 Halaman : 2-4

printf(”0. Exit\n”);

printf(”Masukan pilihan anda [0|1|2|3|4|5] :

”);scanf(”%d”,&pilih);

switch(pilih){

case 1 : { int N; scanf(”%d”,&N); printf(”%d! =

%.0f\n”,N,Faktorial(N); break();}case 2 : {.......(c);break();}

case 3 : {.......(d);break();}

case 4 : {.......(e);break();}

case 5 : {.......(f);break();}

default : {.......(g);break();}

}

system(”pause”);

retrun 0;

}

simpan program 2-1 ke dalam folder anda. Nama file dibuat dengan format <digit NPMpaling belakang tanpa 06><no urut modul>, contoh untuk NPM 06010U001 dan program

modul 1 maka nama filenya adalah 10U0012.cpp. Bawa folder  tersebut pada saatpraktikum (pertemuan 7), copy-kan ke komputer dan selanjutnya ikuti instruksi dosen danasisten praktikum

2.4  LATIHAN PRAKTIKUM IV Berdasarkan program 2-1 di atas1.  Lengkapi program yang masih kosong (a) – (g)2.  Tulis hasil analisisnya serta hasil running program tersebut !

2.5  TUGAS RUMAH IV

Berdasarkan program Latihan Praktikum IV di atas buat dokumentasinya dalam bentuk laporanhasil praktikum