Anda di halaman 1dari 6

Praktikum Algoritma dan Pemrograman II

MODUL VIII

REKURSIF (BAGIAN 2)

Pertemuan : 14
Waktu : 2 x 60 menit (di Laboratorium)

8.1 Tujuan Modul VIII


Setelah mahasiswa mempelajari materi ini, diharapkan dapat :
1. menggunakan teknik pemrograman non-rekursif dengan bahasa C untuk
menyelesaikan kasus tertentu

8.2 Landasan Teori

8.2.1 Proses Rekursif


Untuk memahami proses rekursif yang terjadi dalam sebuah fungsi
rekursif, perhatikan contoh sederhana di bawah ini.

a. Menghitung harga faktorial suatu integer berdasarkan hubungan berulang.


Misalnya kita akan menghitung nilai 5! (lima faktorial). Berdasarkan
pembahasan di point 3.2, dapat dihasilkan gambaran sebagai berikut :

5! = 5x4! = 120

4! = 4x3! = 24

3! = 3x2! = 6

2! = 2x1! = 2

1! = 1 x 0!=1

0! =1

Melalui gambaran hitungan faktorial di atas, pertama-tama perhatikan nilai


dengan arah panah menurun selanjutnya baru perhatikan nilai yang dikirim oleh
arah panah menaik. Gambaran hitungan di atas merupakan proses rekursif, yaitu
nilai lima faktorial akan dapat dihitung apabila nilai empat faktorial diketahui, dan
seterusnya sampai dengan nilai nol faktorial harus diketahui (yang merupakan
nilai awal, nol faktorial terdefinisi adalah satu).

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 8-1


Praktikum Algoritma dan Pemrograman II

b. Contoh yang lain dari fungsi rekursif adalah fungsi pangkat. Sebagai contoh
kita akan menghitung 35, maka proses rekursif akan tampak pada bagan
berikut ini :

35  3  34  3  81  243

34  3  33  3  27  81

33  3  32  3  9  27

32  3  31  3  3  9

31  3  30  3  1  3

30  1
Berdasarkan kondisi di atas maka :
3N = 3 x 3(N-1), untuk N > 0
30 = 1
Contoh ini menunjukan penghitungan fungsi pangkat dapat menggunakan definisi
rekursif.
Secara umum, skema dasar fungsi rekursif sebagai berikut :
Function F(input x : x_type) : function_type;
{mengembalikan nilai F}

Kamus Data :
y : y_type

Algoritma :
if T(x) then
return N(x) {Basis}
else
R1(x)
Return F(g(x)) {Rekurens}
R2(x)
endif

Peubah x adalah parameter pemanggilan prosedur (dapat berupa parameter by


value atau parameter by reference), R1 dan R2 masing-masing adalah prosedur
(atau sekumpulan instruksi) yang dipanggil sebelum dan sesudah pemanggilan
rekursif, g adalah fungsi yang mengubah nilai parameter x, dan T adalah fungsi
untuk kasus basis, dan N adalah fungsi jika kasus basis tercapai. Perhatikanlah
bahwa R1 dan R2 tidak selalu harus ada.
Rekursif disusun oleh 2 bagian :
a. Basis
Bagian ini berisi kasus yang terdefinisi secara eksplisit. Bagian ini juga
sekaligus menghentikan rekursif (dan memberikan sebuah nilai yang
terdefinisi pada fungsi rekursif)

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 8-2


Praktikum Algoritma dan Pemrograman II

b. Rekurens
Bagian ini mendefinisikan objek dalam terminology dirinya sendiri

8.2.2 Contoh Penyelesaian Kasus

1. Fungsi faktorial

Notasi algoritma Bahasa C


Algoritma Fungsi : #include <stdio.h>

Function Fak(input n : int bil;


integer):integer
int fak(int n){
Kamus Data: if (n == 0){
- return 1;
}else{
Algoritma : Return (n * Fak(n-1));
if (n = 0) then }
return 1 }
else
return n * Fak(n-1) main(){
endif scanf(“%d”, &bil);
printf(“%d”, fak(bil));
Algoritma pemanggil : }

Program panggil factorial


Kamus Data:
bil : integer
Function Fak(input n :
integer):integer

Algoritma :
input(bil)
output(Fak(bil))

2. Fungsi Pangkat
Notasi algoritma Bahasa C
Algoritma Fungsi : #include <stdio.h>

Function Pangkat(input a : real, float bil;


input n : integer) : real int n;

Kamus Data : float pangkat(float a,int n){


- if (n==0){
return 1;
Algoritma : }else{
if (n=0) then return (a*pangkat(a,n-1));
Return 1 }
else }
Return (a*Pangkat(a,n-1))
endif main(){
scanf(“%f”, &bil);
Algoritma pemanggil : scanf(“%d”, &n);

Program panggil pangkat printf(“%f”, pangkat(bil, n));


}
Kamus Data :

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 8-3


Praktikum Algoritma dan Pemrograman II

bil : real
n : integer
Function Pangkat(input a : real,
input n : integer) : real

Algoritma :
input(bil, n)
output(pangkat(bil,n))

3. Fungsi Pencarian elemen array dengan sequential search


Notasi algoritma Bahasa C
Algoritma Fungsi : #include <stdio.h>

Function cari(input A : int A[100];


array[1..100] of integer, input n, int x, n, i;
x, j : integer) : integer
int cari(int A[100], int n, int x,
Kamus Data : int j){
- if (A[j] == x){
return j;
Algoritma : }else if(j > n){
if A[j] = x then return -1;
return j }else{
else return cari(A, n, x, j+1);
if j > n then }
return -1 }
else
return cari(A, n, x, j+1) main(){
endif scanf(“%d”, &n);
endif for(i=1; i<=n; i++){
scanf(“%d”, &A[i]);
Algoritma pemanggil : }

Program panggil pangkat printf(“Masukkan angka yang


dicari :”);
Kamus Data : scanf(“%d”,&x);
Data : array[1..100] of integer printf(“%d”,cari(A, n, x, 1));
x : integer }
n : integer
i : integer
Function cari(input A :
array[1..100] of integer, input n,
x, j : integer) : integer

Algoritma :
/*masukkan data array*/
input(n)
for i←1 to n do
input(Data[i])
endfor

/*pemanggilan fungsi*/
input(x)
output(cari(Data,n, x, 1))

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 8-4


Praktikum Algoritma dan Pemrograman II

8.3 Praktikum VII


8.3.1 Tugas Pendahuluan VII
1. Buatlah algoritma fungsi rekursif dan pemanggilnya untuk menghitung deret
berikut :
a. a x b = a + a + a + a +… + a (sebanyak b kali)
b. sum = 1 + 3 + 5 + 7 + …
c. sum = 1 + 5 + 25 + 125 + 625 + …
2. Buatlah algoritma fungsi rekursif dan pemanggilnya untuk membalikkan
urutan huruf dalam sebuah kata. Contoh : huruf ‘MAKAN’ dibalik menjadi
‘NAKAM’ ! parameter input terhadap fungsi adalah kata !
3. Buatlah program untuk mencari indeks array yang elemennya = x
menggunakan fungsi rekursif! Lakukan proses pencarian secara sekuensial.
Nilai elemen array sudah dideklarasikan pada program. Parameter input
berupa array, jumlah elemen array, x, dan indeks awal pencarian;
4. Konversi jawaban soal no 1-3 menjadi program berbahasa C !

8.3.2 Latihan-latihan Praktikum VII


1. Buatlah program bahasa C berupa fungsi rekursif dan pemanggilnya untuk
menghitung deret berikut : (pilih 2 soal saja untuk dikerjakan)
a. sum = 2 + 4 + 6 + 8 + …
b. sum = 1 + 4 + 16 + 64 + 256 + …
c. sum = 3 + 6 + 9 + 12 + …
d. sum = 1 + 3 + 9 + 27 + 81 + …
2. Buatlah program bahasa C berupa fungsi rekursif dan pemanggilnya untuk
membalikkan urutan angka. Contoh : bilangan 9871 dibalik menjadi 1789 !
parameter input terhadap fungsi adalah bilangan !
3. Buatlah program bahasa C untuk mencari indeks array yang elemennya = x
menggunakan fungsi rekursif dan pemanggilnya ! Lakukan proses pencarian
secara sekuensial. Nilai elemen array sudah dideklarasikan pada program.
Parameter input berupa array, jumlah elemen array, x, dan indeks awal
pencarian.

8.3.3 Tugas Rumah VIII


Tugas Rumah VIII ini hanya untuk praktikan yang belum menyelesaikan seluruh
soal Latihan Praktikum VIII.
1. Kerjakan sisa soal Latihan Praktikum yang belum selesai di luar jam
praktikum.
2. Buat laporan praktikum berdasarkan hasil pada praktikum pertemuan pertama
ini. Laporan tersebut berisi:
a. Soal latihan praktikum
b. Solusi dengan menggunakan algoritma
c. Solusi program dengan menggunakan bahasa C
d. Screenshot hasil eksekusi program
Keempat poin tersebut disusun per nomor soal latihan.

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 8-5


Praktikum Algoritma dan Pemrograman II

Jangan lupa mengumpulkannya ke asisten/instruktur maksimal 1x24 jam


setelah praktikum VIII berakhir.

Perhatikan bahwa laporan ini harus merupakan hasil karya sendiri. Kesamaan
seluruh/sebagian isi laporan dengan mahasiswa lain akan mengakibatkan nilai
laporan menjadi Nol.

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 8-6

Anda mungkin juga menyukai