Beranda > Materi Olimpiade Komputer > ROSEDUR dan FUNGSI REKURSIF

ROSEDUR dan FUNGSI REKURSIF

di copy dari http://www.khabib.staff.ugm.ac.id

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.

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

  2. 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?

  3. 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 b suku. 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.

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;

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;

Untuk lebih memahami materi bisa di download disini

  1. April 12, 2010 pukul 5:11 am

    Cool….pak Khabib ini emang jagoan programming…dosen pasa si Pasca UGM
    salam

  2. Juni 20, 2010 pukul 12:41 am

    klo bisa tambahin donk untuk programnya kak…
    q tunggu secepatnya yaaa
    Okey

  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: