• Tidak ada hasil yang ditemukan

BAB II PROSES REKURSI DAN ITERASI

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB II PROSES REKURSI DAN ITERASI"

Copied!
20
0
0

Teks penuh

(1)

BAB II

PROSES REKURSI DAN ITERASI

2.1. Konsep Rekursi dan Iterasi

Proses rekursi merupakan suatu fenomena yang menarik dalam pemrograman komputer. Rekursi adalah suatu proses perulangan untuk menyelesaikan suatu permasalahan berdasarkan suatu hubungan rekurens (recurrence relation). Rekursi dapat didefinisikan sebagai suatu prosedur atau fungsi yang melakukan eksekusi dengan memanggil atau memproses subprogram yang arahnya ke prosedur atau fungsi dirinya sendiri. Artinya, bahwa nilai suatu fungsi dengan argumen tertentu dapat dihitung dari fungsi yang sama dengan argumen-argumen yang mempunyai hubungan rekurens. Jelasnya, prosedur rekursi adalah suatu proses berulang yang dilaksanakan dengan cara memanggil prosedur atau fungsi yang sama yaitu dirinya sendiri. Proses pemanggilan ke prosedur atau fungsi dirinya sendiri tersebut berlangsung secara berulang-ulang yang dapat berarti tidak diketahui kapan proses tersebut akan berakhir.

Sedangkan iterasi merupakan suatu proses perulangan yang dilaksanakan oleh suatu prosedur atau fungsi atau sub program dengan cara memasukkan secara langsung nilai-nilai argumennya. Dalam proses iterasi, proses perulangan dikendalikan oleh suatu pencacah (counter) yang akan selalu berubah setiap kali selesai dilakukan proses perulangan.

Dalam prakteknya, kita dapat secara bebas memilih salah satu di antara kedua teknik tersebut untuk diterapkan dalam program aplikasi. Namun sebagai seorang programer yang baik tentu harus mampu mengembangkan sebuah program aplikasi yang efisien dan optimal. Oleh karenanya kita harus mempertimbangkan tentang beberapa aspek untuk menentukan salah satu teknik yang paling tepat di antara kedua teknik tersebut untuk digunakan. Aspek-aspek yang dimaksud adalah :

(2)

2. Kemudahan penggunaan / penerapan dalam program aplikasi 3. Kejelasan logika untuk mengecek validitas prosedur

4. Kesederhanaan pengguna statemen dalam program

Sungguh sangat sulit untuk menjawab pertanyaan apakah program yang menggunakan prosedur rekursi akan lebih baik bila dibandingkan dengan program yang menggunakan prosedur iterasi. Ataukah justru sebaliknya, prosedur secara iterasi akan lebih baik digunakan dalam program.

Sebagaimana terjadi pada setiap permasalahan yang akan diselesaikan yang tidak terbatas dalam dunia pemrograman komputer, setiap alternatif penyelesaian akan selalu mempunyai kelebihan dan kelemahan yang tentu saja akan menjadi lebih baik untuk diterapkan jika terjadi kesesuaian antara kondisi pemasalahan dengan karakteristik yang dimiliki oleh teknik yang digunakan. Sehubungan dengan hal tersebut penerapan teknik rekursi dan iterasi juga akan memberikan hasil yang terbaik jika memenuhi keempat aspek tersebut di atas. Hal ini berarti bahwa kita tidak akan dapat menentukan prosedur yang lebih unggul di antara kedua prosedur di atas sebelum mengetahui permasalahannya.

Pembahasan dalam bab ini, akan membawa Pembaca ke dalam suatu pemahaman tentang kedua teknik tersebut dan pada akhirnnya akan dapat membandingkan dan mengetahui tentang keunggulan dan kelemahan penggunaan teknik rekursi dan iterasi. Selanjutnya diharapkan, Pembaca akan mampu menentukan salah satu teknik yang sesuai untuk diterapkan pada saat menyelesaikan permasalahan pemrograman yang dihadapi .

2.2. Beberapa Contoh Permasalahan

Untuk membantu memahami proses yang terjadi dalam teknik rekursi dan iterasi, berikut ini akan disajikan beberapa contoh permasalahan yang sering dijumpai dalam pemrograman komputer yang dapat diselesaikan secara rekursi dan iterasi. Dengan memahami contoh-contoh yang disajikan diharapkan Pembaca akan memahami proses yang terjadi dalam kedua teknik tersebut, dapat

(3)

membedakan kedua teknik tersebut jika diterapkan ke dalam program-program aplikasi, serta dapat menentukan teknik yang paling tepat untuk digunakan dalam program aplikasi yang akan dikembangkan.

2.2.1 Perkalian Dua Bilangan Integer

Dalam contoh berikut ini akan disajikan tentang bagaimana menyelesaikan permasalahan perkalian dua bilangan bulat prositif (integer) yang dapat diselesaikan secara rekursi dan iterasi. Dalam cara yang pertama, permasalahan tersebut akan diselesaikan dengan teknik rekursi yang dapat dinotasikan sebagai berikut ini :

Kali(A,B) = A ; jika B = 1 Kali(A,B) = (A + Kali (A,B-1)) ; jika B > 1

Arti dari masing-masing notasi di atas adalah sebagai berikut :

Kali(A,B) : nilai hasil operasi perkalian antara A dan B A dan B : nilai-nilai bilangan yang dioperasikan (operand)

Dari contoh di atas dapat dipahami, bahwa jika B mempunyai harga 1, maka nilai pada Kali(A,B) akan sama dengan harga A. Sebaliknya jika B mempunyai harga lebih dari 1, maka nilai pada Kali(A,B) tidak dapat langsung ditemukan, tetapi harus dihitung terlebih dahulu nilai pada Kali(A,B-1). Untuk mendapatkan nilai pada Kali(A,B-1) harus dihitung terlebih dahulu nilai pada Kali(A,B-2). Untuk memperoleh nilai Kali(A,B-2) harus dihitung terlebih dahulu nilai pada Kali(A,B-3), dan untuk memperoleh nilai Kali(A,B-3) harus dihitung terlebih dahulu nilai pada Kali(A,B-4). Demikian seterusnya proses ini akan selalu diulang secara selama nilai B lebih dari 1.

Solusi dalam bentuk flowchart untuk menyelesaikan perkalian dua bilangan integer yang dilakukan secara rekursi ditunjukkan pada Gambar 2.1. Sedangkan solusi dalam bentuk algoritmanya dapat dituliskan sebagai berikut ini:

(4)

A dan B merupakan variabel untuk menyimpan nilai-nilai bilangan yang akan dikalikan. Kali(A,B) merupakan variabel untuk menyimpan nilai hasil operasi perkalian A dan B.

1. Mulai

2. Proses berulang langkah-2 untuk mengecek apakah harga B = 1

IF B=1

Jika ya, Kali(A,B) = A, lanjutkan ke langkah-3 Jika tidak, Kali(A,B) = A + Kali (A,B-1)

3. Cetak hasil Kali (A,B) 4. Selesai Mulai Baca A, B B=1

Kali(A,B) = A Kali(A,B) = A+Kali(A,B-1)

Cetak Kali(A,B)

Selesai

YA TIDAK

Gambar 2.1 : Flowchart prosedur perkalian dua bilangan integer secara rekursi

Untuk lebih jelasnya, perhatikan proses yang terjadi dalam perkalian dua bilangan integer yang dilakukan secara rekursi dalam contoh-contoh berikut ini :

(5)

6x1 = 6 6x2 = 6 + 6(2-1) = 6 + 6 = 12 6x3 = 6 + 6(3-1) = 6 + 6 + 6 (3-2) = 6 + 6 + 6 = 18 6x4 = 6 + 6(4-1) = 6 + 6 + 6(4-2) = 6 + 6 + 6 + 6(4-3) = 6 + 6 + 6 + 6 = 24

Dalam contoh-contoh di atas, A mempunyai harga 6 dan B mempunyai harga 1, 2, 3, dan 4. Perhatikan apa yang akan terjadi seandainya harga A=1, dan B mempunyai harga yang sangat besar. Tentu saja, jika terjadi demikian maka proses yang terjadi dalam prosedur rekursi tersebut akan mengulang proses penjumlahan harga A (=1) secara berulang sebanyak B kali. Proses seperti ini tentu menjadi sangat tidak efisien untuk dilakukan.

Permasalahan tersebut sebenarnya dapat diatasi dengan memberikan sedikit modifikasi pada prosedur di atas. Modifikasi dapat dilakukan dengan memberikan langkah tambahan untuk melakukan pengecekan guna membandingkan besarnya harga A dan B. Proses pengecekan ini dilakukan pada bagian awal proses. Harga masukan yang lebih kecil selanjutnya ditetapkan sebagai A. Dengan melakukan modifikasi seperti ini, maka proses rekursi dalam perkalian dua bilangan integer akan menjadi lebih baik / efisien.

(6)

Solusi dalam bentuk algoritma perkalian dua bilangan integer hasil modifikasi tersebut dapat dituliskan sebagai berikut ini:

A dan B merupakan variabel untuk menyimpan nilai-nilai bilangan yang akan dikalikan.

BANTU merupakan variabel bantuan untuk menukar nilai A dan B

Kali(A,B) merupakan variabel untuk menyimpan nilai hasil operasi perkalian A dan B.

1. Mulai

2. Cek apakah B lebih dari A IF B > A

Jika ya, BANTU = A A = B B = A

3. Proses berulang langkah-3 untuk mengecek apakah harga B = 1 IF B = 1

Jika ya, Kali(A,B) = A, lanjutkan ke langkah-4 Jika tidak, Kali(A,B) = A + Kali (A,B-1)

4. Cetak hasil

Kali (A,B)

5. Selesai

Teknik kedua untuk menyelesaikan perkalian dua bilangan integer adalah menyelesaikannya secara iterasi. Notasinya dapat dituliskan sebagai berikut :

Kali(A,B) = A+A+A+A+...+A

B kali

Perulangan penambahan A pada fungsi Kali(A,B) dilakukan sebanyak B kali.

Contoh :

6 x 1 = 6

(7)

6 x 2 = 6 + 6 2 kali = 12 6 x 3 = 6 + 6 + 6 3 kali = 18 6 x 4 = 6+6+6+6 4 kali = 24

Flowchart penerapan teknik iterasi untuk perkalian dua bilangan integer dalam contoh di atas ditunjukkan pada Gambar 2.2. Selanjutnya, solusi dalam bentuk algoritma untuk perkalian dua bilangan integer dengan teknik iterasi dapat dituliskan sebagai berikut ini :

A dan B merupakan variabel untuk menyimpan nilai bilangan yang akan dikalikan.

Kali(A,B) merupakan variabel untuk menyimpan nilai hasil operasi perkalian A dan B.

1. Mulai

2. Tentukan, harga awal fungsi Kali(A,B) Kali(A,B) = 0

3. Proses berulang langkah-3 selama B<>0 Cek harga B

WHILE B <>0

Jika ya, hitung Kali(A,B) = Kali(A,B) + A B = B - 1 4. Cetak hasil

Kali(A,B) 5. Selesai

(8)

Mulai Baca A,B Kali(A,B) =0 Kali(A,B) = Kali(A,B) + A B=0 Kali (A,B) B = B - 1 Selesai YA TIDAK

Gambar 2.2 : Flowchart prosedur perkalian dua bilangan integer secara iterasi

Dalam cara iterasi, juga mungkin terjadi kasus perkalian bilangan 1 dengan suatu bilangan lain yang mempunyai harga sangat besar, sehingga akan mengakibatkan diulangnya proses perulangan yang tidak efisien. Hal ini juga dapat diatasi dengan memberikan sedikit modifikasi sebagaimana dilakukan pada bagian sebelumnya pada teknik rekursi.

Efektifitas proses perkalian dua bilangan integer dalam contoh-contoh di atas sangat ditentukan oleh berapa kali langkah yang harus dilakukan untuk menemukan hasil akhir perhitungan yang dicari. Dengan membandingkan kedua contoh penyelesaian masalah di atas, kita dapat menarik kesimpulan bahwa

(9)

penggunaan teknik iterasi untuk mengalikan dua bilangan integer pada umumnya akan lebih efektif dari pada jika dikerjakan dengan teknik rekursi.

2.2.2. Mencari Bilangan FIBONACCI

Bilangan FIBONACCI adalah suatu deret bilangan bulat positif (integer) tak berhingga yang secara berurutan adalah didefinisikan sebagai berikut ini :

1 1 2 3 5 8 13 21 34 58 89 . . . dst

Jika diamati deret bilangan FIBONACCI di atas, maka dapat dipahami bahwa nilai bilangan FIBONACCI suku ke-n dalam deret tersebut dapat dihitung dengan menjumlahkan dua bilangan terdekat pada urutan sebelumnya.

Sebagai contoh, suku bilangan ke-6 dapat dihitung dengan menjumlahkan suku bilangan ke-5 dan ke-4. Nilai bilangan FIBONACCI suku-5 dapat dihitung dengan cara menjumlahkan suku bilangan ke-4 dan ke3. Nilai bilangan FIBONACCI suku-4 dapat dihitung dengan cara menjumlahkan suku bilangan ke-3 dan ke-2. Nilai bilangan FIBONACCI suku-3 dapat dihitung dengan cara menjumlahkan suku bilangan ke-2 dan ke-1.

Secara umum nilai bilangan FIBONACCI suku-n dapat dihitung dengan menjumlahkan nilai-nilai bilangan FIBONACCI suku-(n-1) dan ke-(n-2). Dengan demikian, nilai bilangan FIBONACCI untuk n=1 dan n=2 merupakan nilai-nilai awal yang perlu ditetapkan sebelumnya. Nilai-nilai-nilai awal tersebut digunakan sebagai dasar untuk menghitung nilai-nilai bilangan FIBONACCI untuk suku-suku berikutnya, yaitu bernilai 1 (lihat deret FIBONACCI di atas).

Pencarian nilai suku bilangan FIBONACCI secara rekursi dapat dinotasikan sebagai berikut ini :

FIBONACCI(n)= n ; jika n=1 atau n=2

(10)

Contoh :

Mencari bilangan FIBONACCI suku ke-4 dapat dihitung secara rekursi dengan cara sebagai berikut :

FIBONACCI (4) = FIBONACCI(3) + FIBONACCI(2)

= FIBONACCI(2)+FIBONACCI(1)+ 1

= 1 + 1 + 1

= 3

Ingat nilai bilangan FIBONACCI suku ke-2 dan ke-1 adalah 1, sehingga dari hasil perhitungan diperoleh harga FIBONACCI suku ke-4 adalah sama dengan 3. Untuk harga-harga bilangan FIBONACCI pada suku-suku selanjutnya dapat dihitung dengan cara yang sama seperti di atas. Tentu bukan hal yang sulit untuk melakukannya, tetapi perlu kecermatan untuk mendapatkan hasil akhir perhitungan yang benar.

Mulai

Baca n

n = 1 OR n = 2

FIBONACCI (n) = 1 FIBONACCI (n) = FIBONACCI(n-1) + FIBONACCI (n-2)

Cetak FIBONACCI (n)

Selesai

TIDAK YA

(11)

Flowchart prosedur untuk mencari nilai bilangan FIBONACCI suku ke-n secara rekursi ditunjukkan Gambar 2.3. Sedangkan, solusi dalam bentuk algoritmanya dapat dituliskan sebagai berikut ini :

Masukan suku bilangan FIBONACCI yang akan dicari (=n).

FIBONACCI merupakan variabel untuk menyimpan harga suku bilangan Fibonacci yang dicari.

1. Mulai 2. Baca n

3. Proses berulang langkah-2 Cek harga n

IF (n=1) OR (n=2)

Jika ya, FIBONACCI(n) = 1, lanjutkan ke langkah-4

Jika tidak, FIBONACCI(N) = FIBONACCI(n - 1) + FIBONACCI(n - 2) 4. Cetak hasil

FIBONACCI(n) 5. Selesai

Cara lain untuk menghitung nilai suku bilangan FIBONACCI adalah dengan menggunakan teknik iterasi. Dalam teknik iterasi nilai suku bilangan FIBONACCI dihitung dengan melaksanakan suatu proses perulangan yang memanfaatkan nilai bilangan FIBONACCI suku ke-1 sebagai dasar perhitungan untuk mencari nilai pada suku ke-2. Nilai pada suku ke-2 digunakan sebagai dasar mencari nilai suku 3. Nilai pada suku 3 digunakan sebagai dasar mencari nilai suku ke-4. Demikian seterusnya hingga nilai bilangan FIBONACCI pada suku ke-n yang dikehendaki ditemukan. Flowchart prosedur untuk mencari nilai bilangan FIBONACCI suku ke-n dengan teknik iterasi ditunjukkan pada Gambar 2.4.

Logika proses yang terjadi pada teknik iterasi untuk mencari nilai bilangan FIBONACCI suku ke-n adalah dimulai dengan penetapan harga-harga awal untuk variabel I, FIBONACCI, dan TERAKHIR. I digunakan sebagai variabel pencacah (counter) dalam proses perulangan. FIBONACCI digunakan sebagai variabel bilangan FIBONACCI yang mempunyai harga awal 1 pada suku ke-1.

(12)

TERAKHIR digunakan sebagai variabel untuk menyimpan harga hasil perhitungan bilangan FIBONACCI terakhir pada setiap kali perulangan. Harga awal untuk variabel TERAKHIR adalah 1.

Langkah selanjutnya adalah pengecekan harga n yang merupakan variabel untuk menyimpan data suku ke berapa yang akan dicari. Jika n=1, artinya akan dihitung harga bilangan FIBONACCI suku ke-1, maka nilainya adalah 1 yaitu harga awal yang telah ditetapkan. Sebaliknya, jika n>1, maka akan dilakukan proses berulang selama harga pancacah I kurang dari atau sama dengan n. Variabel BANTU digunakan sebagai variabel bantuan untuk menyimpan nilai sementara suku terakhir dalam deret FIBONACCI selama proses perulangan. Pada akhirnya proses akan berhenti dan nilai yang dicari akan diketemukan jika I=n, dan hasil perhitungannya tersimpan dalam variabel FIBONACCI.

Algoritma untuk mencari nilai bilangan FIBONACCI suku ke-n dengan menerapkan teknik iterasi adalah dituliskan sebagai berikut ini :

Masukkan harga suku bilangan FIBONACCI yang akan akan dicari (n).

FIBONACCI merupakan variabel untuk menyimpan harga bilangan fibonacci yang dicari.

BANTU merupakan variabel bantuan untuk menampung hasil perhitungan sementara.

1. Mulai

2. Tentukan harga-harga awal I, FIBONACCI, dan TERAKHIR I = 1

FIBONACCI = 1 TERAKHIR = 0 3. Cek harga n

IF n = 1

Jika ya, maka FIBONACCI = 1, lanjutkan ke langkah-6

4. Proses berulang langkah-4 hingga langkah-5 untuk menghitung FIBONACCI Hitung

BANTU = FIBONACCI I = I + 1

(13)

5. Hitung

FIBONACCI = FIBONACCI + TERAKHIR TERAKHIR = BANTU 6. Cetak Hasil FIBONACCI 7. Selesai Mulai n = 1 FIBONACCI = 1

FIBONACCI = FIBONACCI + TERAKHIR TERAKHIR = BANTU Cetak FIBONACCI Selesai I = 1 FIBOANCCI = 1 TERAKHIR = 1 TIDAK YA n < > 1 Bantu = FIBONACCI I = I+ 1

Gambar 2.4. : Flowchart prosedur mencari bilangan FIBONACCI secara iterasi

Sebagaimana terjadi dalam perkalian dua bilangan integer, dalam contoh kasus perhitungan nilai bilangan FIBONACCI ini, secara umum teknik iterasi mampu melaksanakan proses perhitungan secara lebih efisien dibandingkan jika

(14)

diselesaikan dengan menerapkan teknik rekursi. Dan tentu saja, hasil perhitungannya akan dapat ditemukan secara lebih cepat.

Cobalah untuk menghitung berapa kali proses perulangan yang harus dilakukan untuk mencari nilai bilangan FIBONACCI suku ke-1, ke-2, ke-3, ke-4, dan ke-5 apabila diselesaikan secara rekursi. Bandingkan hasilnya jika diselesaikan secara iterasi, prosedur manakah yang lebih baik untuk diterapkan dalam perhitungan bilangan FIBONACCI tersebut.

2.2.3. Mencari Nilai Faktorial Bilangan Integer

Faktorial suatu biangan dalam matematika dinotasikan menggunakan tanda " ! " yang dituliskan di belakang bilangan yang akan dihitung faktorialnya. Harga Faktorial merupakan hasil perkalian suku-suku pada suatu bilangan yang dihitung. Berikut ini diberikan contoh untuk menghitung nilai Faktorial suatu bilangan, yaitu : 6! = 6 x 5 x 4 x 3 x 2 x 1 = 720 5! = 5 x 4 x 3 x 2 x 1 = 120 4! = 4 x 3 x 2 x 1 = 24 3! = 3 x 2 x 1 = 6 2! = 2 x 1 = 2

(15)

Mencari nilai faktorial suatu bilangan bulat positif (integer) sebagaimana contoh di atas merupakan contoh permasalahan lain yang dapat diselesaikan dengan menerapkan teknik iterasi maupun teknik rekursi. Secara rekursi notasi untuk menghitung nilai faktorial dapat dituliskan sebagai berikut :

FAKTORIAL(n) = 1 ; jika n = 0

FAKTORIAL(n) = n x FAKTORIAL(n-1) ; jika n > 0

Contoh : 5! = 5 x 4! = 5 x 4 x 3! = 5 x 4 x 3 x 2! = 5 x 4 x 3 x 2 x 1! = 5 x 4 x 3 x 2 x 1 x 0! = 5 x 4 x 3 x 2 x 1 x 1 x 1 = 120

Dalam kasus seperti ini, maka proses dalam prosedur akan melompat ke dalam fungsi dirinya selama harga n > 0. dalam contoh di atas, harga dari 5! adalah 120. Selanjutnya flowchart prosedur untuk menghitung nilai faktorial suatu bilangan secara rekursi ditunjukkan pada Gambar 2.5.

Solusi dalam bentuk algoritma untuk menghitung nilai faktorial suatu bilangan secara rekursi dapat dituliskan sebagai berikut ini :

Masukkan bilangan yang akan dihitung nilai faktorialnya (=n).

FAKTORIAL merupakan variabel untuk menyimpan harga faktorial yang dicari. 1. Mulai

2. Proses berulang langkah-2 Cek harga n

IF n = 0

Jika ya, FAKTORIAL(n) = 1, lanjutkan ke langkah-3 Jika tidak, FAKTORIAL(n) = n x FAKTORIAL(n – 1) 3. Cetak hasil

(16)

FAKTORIAL(n) 4. Selesai

Gambar 2.5. : Flowchart prosedur menghitung nilai Faktorial secara rekursi Mulai

Baca n

n = 0

FAKTORIAL(n) = 1 FAKTORIAL(n)= nxFAKTORIAL(n-1)

Cetak FAKTORIAL(n)

Selesai

Cara lain untuk menghitung nilai Faktorial adalah menyelesaikannya dengan menggunakan teknik iterasi. Dalam cara kedua ini, nilai Faktorial dihitung dengan melakukan suatu proses perulangan untuk mengalikan setiap faktor bilangan yang dicari nilai faktorialnya. Dalam contoh berikut / counter yaitu X. Hasil perhitungan pada setiap iterasi perulangan ditampung pada variabel memori yaitu AKHIR. Hasi akhir nilai faktorial yang dicari akan diperoleh setelah proses perulangan berhenti yaitu ketika X=0 dan akan disimpan dalam variabel yang dinamakan FAKTORIAL.

Flowchart prosedur untuk menghitung nilai faktorial dengan teknik iterasi adalah ditunjukan pada Gambar 2.6. Sedangkan solusi dalam bentuk algoritma prosedur untuk menghitung nilai faktorial secara iterasi dapat dituliskan sebagai berikut :

(17)

Masukkan bilangan yang akan dicari nilai faktorialnya (=n).

X, BANTU dan AKHIR adalah variabel bantuan untuk menghitung nilai faktorial. 1. Mulai

2. Tentukan harga-harga awal X dan AKHIR X = n

AKHIR = 1

3. Proses berulang selama x <> 0 WHILE X <> 0

Hitung AKHIR = AKHIR x X X = X - 1 4. Tentukan FAKTORIAL = AKHIR 5. Cetak hasil FAKTORIAL 6. Selesai Mulai While X <> 0 AKHIR = AKHIR x X X = X - 1 Cetak FAKTORIAL Selesai X = n AKHIR = 1 TIDAK YA FAKTORIAL = AKHIR

(18)

Dalam contoh kasus mencari nilai Faktorial suatu bilangan, ternyata penyelesaian akan lebih efisien jika diselesaikan dengan prosedur secara iterasi. Logika proses penyelesaiannya begitu mudah dipahami, proses perhitungannya sederhana, dan mudah, sehingga memudahkan dalam pengecekan jika terjadi kesalahan dalam prosedur penyelesaian. Sehingga teknik iterasi relatif lebih baik dibanding teknik rekursi.

2.3. Keunggulan Dan Kelemahan Teknik Rekursi dan Iterasi

Dengan mencermati beberapa contoh yang disajikan di atas, maka beberapa keunggulan dan kelemahan penggunaan teknik rekursi dan iterasi dalam program-program aplikasi akan dapat saling dibandingkan. Berikut adalah pernyataan umum berkaitan dengan penggunaan teknik rekursi dan iterasi yang dapat disimpulkan berkaitan dengan dua teknik tersebut.

1. Kecepatan

Pada umumnya pemakaian teknik iterasi mempunyai kecepatan yang lebih tinggi jika dibandingkan jika menggunakan teknik rekursi. Alasan utamanya, karena teknik rekursi mempunyai jumlah langkah keluar masuk blok fungsi atau prosedur secara berulang yang relatif jauh lebih banyak. Prosedur rekursi melakukan proses berulang yang sebenarnya telah dilakukan sebelumnya. Selain itu teknik rekursi harus melakukan langkah-langkah tambahan sehubungan dengan operasi "tumpukan" (stack) yang diakibatkan proses perulangan pada fungsi dirinya sendiri.

2. Kemudahan dipahami

Pada umumnya logika program aplikasi yang menerapkan teknik iterasi relatif lebih mudah dipahami. Hal ini sangat bermanfaat bagi keperluan pengecekan kesalahan prosedur dalam program dan kemudian membetulkannya (debuging).

(19)

Secara nalari kita akan lebih mudah menerapkan teknik iterasi ke dalam prgram-program aplikasi dari pada menggunakan teknik rekursi. Ini merupakan alasan subyektif yang sangat bergantung pada diri kita masing-masing. Namun demikian, pada beberapa kasus pemrograman ada kalanya kita tidak mungkin dapat menghindarkan diri untuk menggunakan teknik rekursi pada beberapa permasalahan yang hanya akan dapat diselesaikan menggunakan teknik rekursi.

Salah satu contoh kasus permasalahan yang hanya akan dapat diselesaikan secara efisien jika menggunakan teknik rekursi adalah permainan Menara Hanoi yang sangat sulit bagi kita untuk menentukan sampai kapan program harus berhenti melakukan proses perulangan. Penyelesaian permainan Menara Hanoi telah banyak dibahas dalam buku-buku pemrograman yang beredar saat ini, sehingga tidak akan dibahas dalam buku ini.

Beberapa contoh permasalahan lain yang dapat diselesaikan dengan menerapkan teknik rekursi dan iterasi adalah proses pencarian (searching) data dari suatu larik data yang telah urut. Jika cacah data sangat besar, tentu saja akan lebih efisien jika diselesaikan menggunakan teknik rekursi yaitu dengan metoda "binary search" dari pada menggunakan teknik iterasi dalam metoda "linear search" (kedua metoda ini akan dibahas pada Bab VI).

Teknik rekursi merupakan suatu teknik pemrograman yang penting dan berdaya guna untuk digunakan pada penyelesaian masalah-masalah pemrograman yang perlu mengekspresikan ke dalam suku-suku dari program dengan menambahkan langkah-langkah sejenis (menggunakan fungsi yang sama) berdasarkan suatu hubungan rekurens (recurance relations). Dalam hal ini teknik rekursi mempunyai tingkat efisiensi yang lebih baik dari pada penggunaan teknik iterasi.

4. Penggunaan memori

Dalam hal pemanfaatan memori, teknik rekursi akan menghasilkan peta penggunaan memori yang terstruktur, sedangkan teknik iterasi tidak demikian.

(20)

5. Keterbatasan perangkat lunak bahasa pemrograman

Penggunaan teknik rekursi akan memberikan implementasi struktur data "tumpukan" (stack) yang dilakukan secara internal oleh komputer. Akibatnya, tidak semua bahasa pemrograman komputer mampu melakukan teknik rekursi. Namun demikian bahasa-bahasa pemrograman versi baru telah mendukung penerapan teknik rekursi, misal bahasa C++, Turbo C, Turbo Pascal, Asembler, dan lain-lain.

Khusus untuk bahasa Assembler, sekalipun mendukung penggunaan teknik rekursi artinya bahwa programer dapat memanfaatkan bahasa pemrograman tersebut untuk memecahkan permasalahan dengan menggunakan teknik rekursi, namun programmer harus merancang dan menginisialisasikan sendiri tentang pengolahan operasi tumpukan (stack).

Sebagai catatan tambahan, pada akhirnya penggunaan teknik rekursi atau iterasi pada program-program aplikasi adalah bergantung pada masing-masing pemrogram aplikasi. Mungkin dalam kasus-kasus tertentu teknik rekursi akan lebih baik diterapkan, namun karena tak cukup mampu atau karena lebih suka menggunakan teknik iterasi yang sebenarnya sangat bertele-tele dan tidak efisien, dan pada akhirnya tekni iterasi yang dipilih dan digunakan, maka tidak mungkin bagi orang lain untuk mencegahnya.

Sebagai pesan pada akhir bab ini, kita harus berusaha untuk merancang dan mengembangkan program aplikasi yang efisien dan optimal. Gunakanlah teknik rekursi atau iterasi secara tepat. Kita perlu merancang dan mengembangkan program-program aplikasi yang berkualitas, efisien, dan efektif.

Gambar

Gambar 2.1 : Flowchart prosedur perkalian dua bilangan integer secara rekursi
Gambar 2.2 : Flowchart prosedur perkalian dua bilangan integer secara iterasi
Gambar 2.3 : Flowchart prosedur mencari bilangan FIBONACCI secara rekursi
Gambar 2.4. : Flowchart prosedur mencari bilangan FIBONACCI secara iterasi
+3

Referensi

Dokumen terkait

kompleks lainnya berdasarkan polinomial terdeflasi. Dengan demikian, hasil analisi cukup teliti karena dilakukan perhitungan persentase estimasi eror nilai u dan v pada

Setelah diasumsikan besar suku bunga dan tabel mortalita yang digunakan, selanjutnya dihitung nilai anuitas berjangka, premi bersih tunggal dan premi bersih tahunan

Selanjutnya nilai korelasi dari hasil perhitungan di atas, selanjutnya dihitung nilai koefisien determinasinya, untuk mengetahui besaran pengaruh penerapan metode pembiasaan

Metode ini merupakan perhitungan penyusutan aktiva tetap , dimana beban penyusutan pada suatu periode akuntansi dihitung dengan cara mengalikan harga perolehan

Perhitungan konsistensi dengan mengalikan setiap nilai pada kolom pertama dengan relatif elemen pertama dan seterusnya hingga semua elemen sudah dihitung, lalu dibagi

Personal best dipilih dengan cara memilih nilai terbaik dari suatu swarm pada seluruh iterasi yang telah dilakukan.. (d) Menentukan

Pada tugas akhir ini, optimasi global selain membantu dalam proses perhitungan mencari nilai dari total biaya rata-rata minimum, optimasi global juga membantu dalam proses

Anda dapat memahami aturan perhitungan penjumlahan dengan memperhatikan tanda dan nilai mutlak dari dua bilangan, dan penjumlahan juga dapat dihitung berdasarkan itu.. Pahami bahwa