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 :
adalah Dengan melihat sifat sub program rekursif di atas maka sub program rekursif harus memiliki :
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;
Cetakan ke 1
Cetakan ke 2
Cetakan ke 3
Cetakan ke 4
Cetakan ke 5
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
1. Dengan prosedur
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
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
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.
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.
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
9 Rekursif pada PascalProgram 9.3 merupakan contoh program rekursif pada bahasa Pascal
untuk menghitung hasil faktorial dari suatu bilangan.
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)
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.
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.
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.
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.
Var
a,b:integer
neg:real
Input
a
Input b
If y = 0
Pangkat := 1
Pangkat := x * pangkat
Menghitung a pangkat b
If b < 0
END
a pangkat b = pangkat(a,b))
Program rekursif;
Uses crt;
Var
Begin
{menampilkan teks masukkan menghitung a pangkat b dan akan mengikuti perintah selanjutnya}
{menampilkan teks masukkan bilangan a dengan perintah berikutnya mengikuti baris yang sama};
{menampilkan pembacaan nilai a}
{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}
Neg:1=/(pangkat(a,abs(b)));
Writeln(‘a,’pangkat’,b,’=’,pangkat(a,b));