Anda di halaman 1dari 14

Kesimpulan

Fungsi rekursif merupakan fungsi yang memanggil dirinya sendiri. Terdapat dua komponen
penting dalam fungsi rekursif, yaitu kondisi kapan berhentinya fungsi dan pengurangan atau
pembagian data ketika fungsi memanggil dirinya sendiri. Optimasi fungsi rekursif dapat
dilakukan dengan menggunakan teknik tail call, meskipun teknik ini tidak selalu
diimplementasikan oleh semua bahasa pemrograman.
Selain sebagai fungsi, konsep rekursif juga terkadang digunakan untuk struktur data seperti
binary tree atau list.
PROSEDUR dan FUNGSI REKURSIF
Prosedur dan fungsi merupakan sub program yang sangat bermanfaat dalam pemrograman, terutama
untuk program atau proyek yang besar. Manfaat penggunaan sub program antara lain adalah :

Prosedur dan fungsi merupakan sub program yang sangat bermanfaat dalam pemrograman, terutama untuk
program atau proyek yang besar. Manfaat penggunaan sub program antara lain adalah :

1. meningkatkan readibility, yaitu mempermudah pembacaan program


2. meningkatkan modularity, yaitu memecah sesuatu yang besar menjadi modul-modul atau bagian-
bagian yang lebih kecil sesuai dengan fungsinya, sehingga mempermudah pengecekan, testing dan
lokalisasi kesalahan.
3. meningkatkan reusability, yaitu suatu sub program dapat dipakai berulang kali dengan hanya
memanggil sub program tersebut tanpa menuliskan perintah-perintah yang semestinya diulang-ulang.
Sub Program Rekursif adalah sub program yang memanggil dirinya sendiri selama kondisi pemanggilan
dipenuhi.

adalah Dengan melihat sifat sub program rekursif di atas maka sub program rekursif harus memiliki :

1. kondisi yang menyebabkan pemanggilan dirinya berhenti (disebut kondisi khusus atau special


condition)
2. pemanggilan diri sub program (yaitu bila kondisi khusus tidak dipenuhi)
Secara umum bentuk dari sub program rekursif memiliki statemen kondisional :

if kondisi khusus tak dipenuhi


then panggil diri-sendiri dengan parameter yang sesuai 
else lakukan instruksi yang akan dieksekusi bila kondisi khusus dipenuhi
Sub program rekursif umumnya dipakai untuk permasalahan yang memiliki langkah penyelesaian yang terpola
atau langkah-langkah yang teratur. Bila kita memiliki suatu permasalahan dan kita mengetahui algoritma
penyelesaiannya, kadang-kadang sub program rekursif menjadi pilihan kita bila memang memungkinkan untuk
dipergunakan. Secara algoritmis (dari segi algoritma, yaitu bila kita mempertimbangkan penggunaan memori,
waktu eksekusi sub program) sub program rekursif sering bersifat tidak efisien . 
Dengan demikian sub program rekursif umumnya memiliki efisiensi dalam penulisan perintah, tetapi kadang tidak
efisien secara algoritmis. Meskipun demikian banyak pula permasalahan-permasalahan yang lebih sesuai
diselesaikan dengan cara rekursif (misalnya dalam pencarian / searching, yang akan dibahas pada pertemuan-
pertemuan yang akan datang).

Contoh sub program rekursif dalam bahasa Pascal.

1. Contoh sederhana
PROCEDURE TULIS_1(banyak : integer;kata : string); 
begin 
if banyak > 1 then TULIS_1(banyak-1,kata); 
writeln(kata, banyak:5); 
end;   

OUTPUT  (misal dipanggil dengan TULIS_1(5,"Cetakan ke ")) 

Cetakan ke 1 
Cetakan ke 2 
Cetakan ke 3 
Cetakan ke 4 
Cetakan ke 5  

Bandingkan prosedur dan outputnya di atas dengan prosedur di bawah ini!   

PROCEDURE TULIS_2(banyak : integer;kata : string); 


begin 
writeln(kata, banyak:5); 
if banyak > 1 then TULIS_1(banyak-1,kata); 
end;

OUTPUT  (misal dipanggil dengan TULIS_2(5,"Cetakan ke ")) 


Cetakan ke 5 
Cetakan ke 4 
Cetakan ke 3 
Cetakan ke 2 
Cetakan ke 1  

Mengapa hasilnya jauh berbeda?   

2. Contoh terapan
Secara matematis, perkalian dua bilangan bulat positif a dengan b (ditulis ab atau a x b)
pada hakekatnya merupakan penjumlahan dari a sebanyak b suku, yaitu a + a + a + …. +
a sebanyak bsuku. Misalnya 2 x 3 dapat diartikan sebagai 2 + 2 + 2 = 6 , yaitu
penjumlahan 2 sebanyak 3 suku   Dengan mengingat bahwa suatu bilangan bila
dikalikan dengan angka 1 (satu) akan menghasilkan bilangan itu sendiri, maka
permasalahan perkalian dengan menyatakannya dalam bentuk penjumlahan di atas
dapat diselesaikan dengan komputer secara mudah.

Kembali ke atas

Dengan non rekursif

1. Dengan prosedur

Procedure KALI_BIASA_P(a,b : integer; var hasil : longint); 


var i : integer; 
begin 
hasil := 0; 
for i:= 1 to b do hasil := hasil + a; 
end; 

2. Dengan fungsi
Function KALI_BIASA_F(a,b:integer):longint; 
var hasil : longint; i: integer; 
begin 
hasil := 0; 
for i:= 1 to b do hasil := hasil + a; 
KALI_BIASA_F := hasil; 
end;  

Kembali ke atas

Dengan Rekursif

1. Dengan Prosedur

Procedure KALI_REK_P(a,b:integer;var hasil:longint) 


begin 
if b>1 then KALI_REK_P(a,b-1,hasil); 
hasil:= hasil+a; 
end;

2. Dengan Fungsi

Function KALI_REK_F(a,b:integer):longint; 
begin 
if b>1 then 
KALI_REK_F := KALI_REK_F(a,b-1)+a 
else 
KALI_REK_F := a; 
end;  
Contoh program pascal untuk untuk mencari nilai faktorial dengan menggunakan
rekursif

Berikut Source Code nya :

Program Faktorial;
Uses crt;
Var n,a,b:integer;

Function faktorial(n:integer):integer;
Begin
  If (n=0) then
  Faktorial:=1
  Else
  Faktorial:=n*faktorial(n-1);
End;

Begin
  Clrscr;
  Writeln('Program Faktorial');
  Writeln;
  Write('Masukkan Angka : ');readln(n);
  Writeln(n,'! = ',faktorial(n));
  Readln;
End.

Berikut Output Program nya :


1. Tampilan awal.

2. Input angka
3. Hasil faktorial
Presentasi berjudul: "MATERI 9 FUNGSI REKURSIF."—
Transcript presentasi:
1  MATERI 9FUNGSI REKURSIF

2  PengantarRekursif merupakan suatu metode pada procedure atau function yang di dalamnya
terdapat perintah untuk memanggil procedure atau function itu sendiri.Contoh sederhana :def
a(p) =if p=0 then exit fiprintnumber(p);a(p-1);enddefa(5);baseRekursifProgram 9.1

3  PengantarPada pemanggilan pertama a(5), definisi a akan dijalankan yang pada awal definisi
akan mencetak nilai p, yaitu 5.Setelah itu ada pemanggilan definisi a lagi dengan parameternya
adalah p-1 yaitu 4. Pemanggilan definisi a ini akan menjalankan definisi a, kali ini dengan nilai p
adalah 4. Yang dicetak di layar adalah nilai p yaitu 4.Setelah itu kembail terjadi pemanggilan
definisi a dengan parameter p-1, yaitu 3.Proses ini berulang lagi, dengan mencetak nilai 3
kemudian memanggil a dengan parameter 2.Begitu seterusnya secara berulang-ulang.

4  Penentuan KondisiProgram 9.1 merupakan contoh program rekursif namun masih memiliki
cacat, yaitu perulangan yang terjadi tidak akan pernah berhenti karena dengan nilai parameter
berapapun, pasti terjadi proses rekursif (pemanggilan kembali definisi a).Untuk melengkapi
definisi a, perlu ditentukan kapan dilakukan proses rekursif dan kapan tidak. Jika misalnya
diinginkan untuk melakukan proses rekursif selama nilai parameter yang diberikan > 0 maka
Program 9.1 dapat dilengkapi seperti pada Program 9.2.

5  Penentuan Kondisidef a(p) = printnumber(p); if (p>1) then a(p-1) fi enddef


a(5);BaseRekursifProgram 9.2

6  Penentuan KondisiDengan demikian proses rekursif hanya akan terjadi pada saat nilai p > 0,
yaitu mulai dari pemanggilan pertama, 5, kemudian pada saat rekursif dengan nilai p = 4, p = 3,
p = 2 dan p = 1.Pada saat pemanggilan a(p) dengan nilai p adalah 1, maka yang dikerjakan
adalah mencetak nilai p, yaitu 1. Setelah itu karena kondisi (p>1) untuk nilai p=1 akan bernilai
false maka tidak akan terjadi proses rekursif.Penentuan kondisi ini merupakan hal yang sangat
penting dan harus dituliskan dengan benar untuk menghindarkan program dari
kesalahan.Proses rekursif akan memberikan solusi yang sulit diselesaikan dengan
menggunakan repetition biasa. Misalnya pada kasus menghitung faktorial.

7  Pengertian RekursifProgram yang dalam prosesnya memanggil dirinya sendiri, tetapi dengan
nilai parameter yang berbeda.2 hal yang harus diperhatikanAda nilai batas (base)Fungsi
rekursifnya konvergen (mendekat) ke arah nilai batas

8  Rekursif dengan simbol matematika


Dalam matematika rekursif biasa disimbolkan seperti berikut iniKalau diberikan x=5 maka nilai
fungsi tersebutf(5) = 5 * f(4) *24 = 120f(4) = 4 * f(3) * 6 = 24f(3) = 3 * f(2) * 2 = 6f(2) = 2 * f(1) *1 =
2f(1) = 1Jadi hasilnya f(5) = sama saja dengan 1*2*3*4*5baserekursif

9  Rekursif pada PascalProgram 9.3 merupakan contoh program rekursif pada bahasa Pascal
untuk menghitung hasil faktorial dari suatu bilangan.

10  Bandingkan dengan simbol matematika di hal 8 dan eksekusinya


uses crt;function f(n : integer);beginif (n=1) thenf := 1;elsef := n * f(n-
1);end;BEGINwrite(f(5));END.Program 9.3Bandingkan dengan simbol matematika di hal 8 dan
eksekusinya
11  Output Program 9.3 : Pemanggilan f(5) : = 5 * f(4) = 5 * 4 * f(3)
= 5 * 4 * 3 * 2 * 1= 120

12  Latihan 1Terjemahkan dalam Rekursif (menggunakan pascal) untuk menghitung apa f(x,y)
berikut ini ?Ubah program pascal tersebut dengan menggunakan perintah perulangan while …
do atau forBuatlah tabel analisis untuk membuktikan bahwa program yang anda buat adalah
benar dengan f(3,5)!

13  Latihan 2Terjemahkan dalam Rekursif (menggunakan pascal) untuk menghitung apa f(k)
berikut ini ?Tuliskan langkah-langkah eksekusinya dengan tabel analisis (agar mengerti) untuk
f(5)

14  Latihan 3Terjemahkan dalam Rekursif (menggunakan pascal) untuk menghitung bilangan


berpangkat x^(n)?Buatlah tabel analisis untuk program di atas jika diketahui 4^8.

15  -selesai- 
PROGRAM PASCAL REKURSIF
REKURSIF

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. Pada proses rekursif, akan terjadi secara
berulang-ulang. Oleh karena itu,perlu adanya stopping role atau penyetopan dari penghentian
proses perulangan tersebut.

Kelebihan Fungsi Rekursif:

 Program lebih singkat.
 Pada beberapa kasus, lebih mudah menggunakan fungsi rekursif, contohnya: pangkat,
factorial, dan fibonacci, dan beberapa proses deret lainnya.
 Lebih efisien dan cepat dibandingkan proses secara iteratif.

Kekurangan Fungsi Rekursif:

 Memakan memori lebih besar, karena setiap bagian dari dirinya dipanggil, akan
membutuhkan sejumlah ruang memori untuk penyimpanan.
 Rekursif sering kali tidak bisa berhenti sehingga memori akan terpakai habis dan program
bisa hang.

Cara Memecahkan Masalah Dengan Metode Rekursif:

1. Tentukan kasus penyetopnya, saat pemanggilan fungsinya tidak diperlukan lagi


2. Terapkan suatu langkah untuk menggiring kasus kompleks ke kasus penyetopan dengan
metode yang mencerminkan fungsi.

Bentuk rekursif :
a.  suatu  subrutin/fungsi/ prosedur yang memanggil dirinya sendiri.
b. Bentuk dimana pemanggilan subrutin terdapat dalam body subrutin
c. Dengan rekursi, program akan lebih mudah dilihat

Kesimpulan:

Rekursif berarti suatu proses bisa memanggil dirinya sendiri, sehingga dengan cirinya tersebut
rekursif salah satu konsep yang penting untuk dikuasai. Hal ini dikarenakan fungsi ini memiliki sangat
banyak implementasi, yang dalam hal ini adalah implementasi dalam algoritma. Fungsi rekursif
memiliki kelebihan dan kelemahan yang telah disebutkan diatas.

CONTOH FLOWCHART  PROGRAM DAN ALGORITMA PROGRAM REKURSIF


START

Var

a,b:integer

neg:real

Function pangkat (x,y:integer):longint

Input
a

Input b

If y = 0

Pangkat := 1

Pangkat := x * pangkat

Menghitung a pangkat b

If b < 0

END

neg: 1/(pangkat (a,abs(b)))

a pangkat b = pangkat(a,b))
 
 

Program rekursif;

{membuat program dengan  judul rekursif}

Uses crt;

{digunakan untuk memanggil library pascal}

Var

            a,b : integer;

            neg: real;

{menampilkan deklarasi variabel dengan data integer}

Function pangkat (x,y:integer): longint;

Begin

{awal pembacaan sebuah program}

If y=0 then pangkat :=1

{mengungkapkan seleksi yang diseleksi}

Else pangkat :=x*pangkat(x,y-1)

{mengungkapkan kondisi x*pangkat(x,y-1)}

End; {mengakhiri pembacaan sebuah program}

Begin {awal pembacaan sebuah program}

Clrscr {perintah untuk membersihkan layar}

Writeln(‘menghitung a pangkat b’);

{menampilkan teks masukkan menghitung a pangkat b dan akan mengikuti perintah selanjutnya}

Write(‘masukkan bialangan a’); redaln(a);

{menampilkan teks masukkan bilangan a dengan perintah berikutnya mengikuti baris yang sama};
{menampilkan pembacaan nilai a}

Write(‘masukkan nilai b’); readln(b);

{menampilkan teks masukkan bilangan b dengan perintah berikutnya mengikuti baris yang sama};
{menampilkan pembacaaan nilai b}
If b<0 then

{mengungkapkan kondisi yag diseleksi nilai kurang dari nol dan jika memenuhi akan  mengikuti
perintah selanjutnya}

Begin {awal pembacaan sebuah program}

Neg:1=/(pangkat(a,abs(b)));

Writeln(‘a,’pangkat’,b,’=’,pangkat(a,b));

{menampilkan teks masukkan a pangkat b = hasil dari a pangkat b}

Readln; {menmpilkan pembacaan sebuah karakter}

End. {mengakhiri pembacaan sebuah program utama}

End. {mengakhiri pembacaan sebuah program utama}

Anda mungkin juga menyukai