• Tidak ada hasil yang ditemukan

Pendahuluan Faktorial Menara Hanoi

N/A
N/A
Protected

Academic year: 2018

Membagikan "Pendahuluan Faktorial Menara Hanoi"

Copied!
9
0
0

Teks penuh

(1)

S1 Teknik Informatika-Unijoyo 1

Algoritma Pemrograman

Pertemuan Ke-14

(Rekursi)

(2)

S1 Teknik Informatika-Unijoyo 3 Algoritma rekursi adalah algoritma yang merupakan proses dalam subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri

Tidak semua bahasa tingkat tinggi menyediakan kemampuan untuk melakukan algoritma rekursi. Salah satu bahasa tingkat tinggi yang dapat melakukan rekursi adalah Bahasa Pascal

Proses rekursi untuk beberapa kasus merupakan algoritma yang baik dan dapat membuat pemecahan masalah lebih mudah. Akan tetapi proses ini banyak menggunakan memori, dikarenakan setiap kali suatu subprogram dipanggil, maka diperlukan sejumlah tambahan memori

Dalam menulis suatu fungsi atau prosedur rekursi, yang perlu diperhatikan adalah fungsi atau prosedur tersebut harus mengandung suatu kondisi akhir dari proses rekursi. Kondisi ini diperlukan untuk mencegah terjadinya proses rekursi yang tidak berujung (indefinite), yaitu proses rekursi akan terus dilakukan tanpa berhenti

Pendahuluan

Contoh 1: Proses rekursi yang tidak pernah berakhir (karena tidak mengandung kondisi untuk mengakhirkan rekursi tersebut)

Algoritma REKURSI_TANPA_AKHIR

{ Rekursi yang tidak berujung akhir } DEKLARASI (* Program Utama *)

{ Tidak ada }

procedure Rekursi

{ Menampilkan tulisan “Informatika” secara terus menerus, karena tidak mengandung kondisi pengakhiran rekursi }

DEKLARASI (* Prosedur *) { Tidak ada }

DESKRIPSI : (* Prosedur *) write(‘Informatika ’) Rekursi

DESKRIPSI : (* Program Utama *) Rekursi

Program REKURSI_TANPA_AKHIR; procedure Rekursi;

Begin

Write(‘Informatika ’);

Rekursi;

End;

Begin Rekursi;

(3)

S1 Teknik Informatika-Unijoyo 5 • Bila program dijalankan, maka proses rekursi akan terus dijalankan

tanpa berhenti sebagai berikut:

Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika Informatika . . .

• Kondisi pengakhiran rekursi dapat dilakukan dengan menggunakan struktur penyeleksian kondisi. Rekursi akan dihentikan bila kondisi telah memenuhi syarat

Contoh 1: Hasil Keluaran

Contoh 2: Proses rekursi sebanyak 5 kali, yaitu dengan menyeleksi kondisi dari peubah ulang sampai dengan bernilai 5

Algoritma REKURSI_DENGAN_AKHIR { Rekursi yang tidak berujung akhir } DEKLARASI (* Program Utama *)

ulang : integer

procedure Rekursi

{ Menampilkan tulisan “Informatika” sebanyak 5 kali }

DEKLARASI { Tidak ada } DESKRIPSI : (* Prosedur *) if ulang < 5 then

write(‘Informatika ’) ulang ← ulang + 1 Rekursi

endif

DESKRIPSI : (* Program Utama *) ulang ← 0

Rekursi

Program REKURSI_DENGAN_AKHIR; Var

ulang : integer;

procedure Rekursi;

Begin

if ulang < 5 then begin

(4)

S1 Teknik Informatika-Unijoyo 7 Contoh 3: Prosedur Deret untuk menampilkan suatu deret bilangan bulat N dari 0 sampai dengan 5

Algoritma DERET

{ Menampilkan deret bilangan bulat N dari 0 sampai 10 }

DEKLARASI (* Program Utama *) N : integer

procedure Deret(output N : word) DEKLARASI (* Prosedur *)

{ Tidak ada }

DESKRIPSI : (* Prosedur *) write(N)

if n < 5 then Deret(N+1) endif

DESKRIPSI : (* Program Utama *) N ← 0

• Bila program dijalankan didapatkan hasil:

0 1 2 3 4 5

Faktorial adalah 1x2x3x4x...N (dengan asumsi N lebih besar dari 3) dan dapat dirumuskan dengan:

N! = N * (N-1) * (N-2) * ... * 1

Perumusan ini dapat didefinisikan secara rekursi sebagai berikut:

N! = N * (N-1)!

Misal, rekursi nilai 4!Dapat dihitung kembali sebesar 4 * 3!, sehingga 5! menjadi:

5! = 5 * 4 * 3!

Secara rekursi nilai 3! adalah 3 * 2!, sehingga nilai 5!

menjadi:

5! = 5 * 4 * 3 * 2 !

Secara rekursi nilai dari 2!adalah 2 * 1, sehingga akhirnya nilai 5!adalah:

5! = 5 * 4 * 3 * 2 * 1 = 120

(5)

S1 Teknik Informatika-Unijoyo 9 Proses rekursi untuk menghitung N!

N! = 1 untuk N <= 1 N! = N * (N-1)! untuk N > 1

Algoritma HITUNG_FAKTORIAL;

{Menghitung faktorial suatu nilangan bulat} DEKLARASI (* Program Utama *)

N : integer

function FAKTORIAL(input N:integer)→→→→ integer

{ mengembalikan nilai n! } DEKLARASI (* Fungsi *) { tidak ada }

DESKRIPSI: (* Fungsi *) if N ≤ 1 then

return 1 else

return n*FAKTORIAL(n-1) endif

DESKRIPSI: (* Program Utama *) write(‘Berapa faktorial ?’) read(N)

write(‘Faktorial = ‘,FAKTORIAL(N))

PROGRAM HITUNG_FAKTORIAL; var

N : integer;

function Faktorial(N: integer): integer;

begin

if N <= 1 then

Faktorial := 1

else

Faktorial := N * Faktorial(N-1);

end;

begin

write(‘Berapa faktorial ?’);

readln(N);

write(‘Faktorial= ‘,Faktorial(N));

end.

Permasalahan menara Hanoi adalah memindahkan sejumlah piringan dari satu menara ke menara yang lain

Pemindahan piringan dilakukan satu demi satu dan tidak boleh ada piringan yang lebih kecil yang berada di bawah piringan yang lebih besar. Untuk itu disediakan sebuah menara lagi untuk bantuan pemindahan. Jadi dipergunakan tiga buah menara, yaitu:

1.menara sumberyang berisi piringan yang akan dipindahkan (menara A)

2.menara tujuanpiringan (menara C) 3.menara untuk bantuan(menara B)

(6)

S1 Teknik Informatika-Unijoyo 11 Permasalahan Menara Hanoi:

Menara A sebagai sumber Menara C sebagai tujuan Menara B sebagai bantuan

Ilustrasi Menara Hanoi [1]

Anggaplah jumlah piringan yang akan dipindahkan adalah N piringan

Permasalahan ini dapat dipecahkan dengan langkah sebagai berikut:

Jika N = 1, maka langsung pindahkan saja piringan dari menara Ake menara Cdan selesai

Pindahkan N-1piringan dari menara Ake menara B, menggunakan menara Csebagai menara bantuan Pindahkan sisa sebuah piringan di Alangsung ke C

Akhirnya pindahkan sisa sejumlah N-1 piringan di menara B ke menara Cdengan menggunakan bantuan menara A Pemindahan N-1 piringan tersebut dilakukan satu per satu dan tidak sekaligus. Proses pemindahan merupakan proses yang berulang-ulang (rekursi)

(7)

S1 Teknik Informatika-Unijoyo 13 Algoritma MENARA_HANOI

{ Pemindahan piringan pada permasalahan Menara Hanoi } DEKLARASI (* Program Utama *)

J, L : integer A, B, C: char

procedure MenaraHanoi(input J : integer, input A,C,B : char; output L : integer)

DEKLARASI (* Prosedur *) { tidak ada }

DESKRIPSI: (* Prosedur *) if J = 1 then

L ←L + 1

write(‘Langkah : ‘,L,’ ‘)

write(‘Pindahkan piringan 1 dari menara ‘,A,’ ke menara ‘,C) else

(* Pindahkan N-1 piringan dari menara A ke B menggunakan menara C*)

MenaraHanoi(J-1,A,B,C,L) L ←L + 1

write(‘Langkah : ‘,L,’ ‘)

write(‘Pindahkan piringan ’,J,’ dari menara ‘,A,’ ke menara ‘,C) (* Pindahkan N-1 piringan dari menara B ke C menggunakan menara A *)

MenaraHanoi(J-1,B,C,A,L) endif

DESKRIPSI: (* Program Utama *) write(‘Jumlah Piringan ? ’) readln(J)

Procedure MenaraHanoi(J:integer; A,C,B:char; Var L:integer); begin

if J = 1 then begin

L := L + 1;

write(‘Langkah : ‘,L,’ ‚);

writeln(‘Pindahkan piringan 1 dari menara ‘,A,’ ke menara ‘,C);

end else begin

(* Pindahkan N-1 piringan dari menara A ke B menggunakan menara C*)

MenaraHanoi(J-1,A,B,C,L); L := L + 1;

write(‘Langkah : ‘,L,’ ‘);

writeln(‘Pindahkan piringan ’,J,’ dari menara ‘,A,’ ke menara ‘,C); (* Pindahkan N-1 piringan dari menara B ke C menggunakan menara A *)

MenaraHanoi(J-1,B,C,A,L);

end;

end;

begin

(8)

S1 Teknik Informatika-Unijoyo 15

Jumlah piringan ? 4

Langkah: 1 Pindahkan piringan 1 dari menara A ke menara B Langkah: 2 Pindahkan piringan 2 dari menara A ke menara C Langkah: 3 Pindahkan piringan 1 dari menara B ke menara C Langkah: 4 Pindahkan piringan 3 dari menara A ke menara B Langkah: 5 Pindahkan piringan 1 dari menara C ke menara A Langkah: 6 Pindahkan piringan 2 dari menara C ke menara B Langkah: 7 Pindahkan piringan 1 dari menara A ke menara B Langkah: 8 Pindahkan piringan 4 dari menara A ke menara C Langkah: 9 Pindahkan piringan 1 dari menara B ke menara C Langkah: 10 Pindahkan piringan 2 dari menara B ke menara A Langkah: 11 Pindahkan piringan 1 dari menara C ke menara A Langkah: 12 Pindahkan piringan 3 dari menara B ke menara C Langkah: 13 Pindahkan piringan 1 dari menara A ke menara B Langkah: 14 Pindahkan piringan 2 dari menara A ke menara C Langkah: 15 Pindahkan piringan 1 dari menara B ke menara C

Hasil keluaran untuk 4 piringan dalam menara Hanoi

• Algoritma rekursi adalah algoritma yang merupakan proses

dalam subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri

• Yang perlu diperhatikan dalam penulisan fungsi atau

prosedur rekursi adalah fungsi atau prosedur tersebut harus mengandung suatu kondisi akhir dari proses rekursi.

Kondisi ini diperlukan untuk mencegah terjadinya proses rekursi yang tidak berujung (indefinite), yaitu proses rekursi akan terus dilakukan tanpa berhenti

• Contoh permasalahan yang dapat diselesaikan dengan

lebih baik dan lebih mudah dengan menggunakan algoritma rekursi adalah Permasalahan Faktorial dan Menara Hanoi

(9)

S1 Teknik Informatika-Unijoyo 17

Jogiyanto HM [1989].

Turbo Pascal

, Yogyakarta: Andi

Offset.

Noor Ifada [2005].

Diktat Matakuliah Algoritma

Pemrograman (Hibah Kompetisi A1)

, Bangkalan:

Jurusan Teknik Informatika, Universitas Trunojoyo.

Rinaldi Munir [2003].

Algoritma dan Pemrograman

dengan Pascal dan C edisi Kedua

, Bandung: Informatika.

Referensi

Dokumen terkait

Penggunaan tepung daun mengkudu yang diccampurkan ke dalam pakan puyuh pada usia awal produksi daengan level 9 % dapat menggantikan penggunaan antibiotik sintetik karena

Rekomendasi tersebut diajukan dengan pertimbangan antara lain: memperhatikan Pasal 9 dan 10 UU RI Nomor 11 Tahun 2012 tentang Sistem Peradilan Pidana Anak;

Menurut Waluyo (2014:238) Pajak Penghasilan (PPh) Pasal 21 adalah “Pajak Penghasilan yang dikenakan atas penghasilan berupa gaji, upah, honorarium, tujangan, dan pembayaran

Dengan fenomena tersebut Program Keluarga Harapan di Desa Sebuntal di nilai tidak tepat sasaran pasalnya seperti yang dijabarkan diatas, bantuan ini di khususkan

Dalam penghentian pengakuan aset keuangan terhadap satu bagian saja (misalnya ketika Perusahaan masih memiliki hak untuk membeli kembali bagian aset yang

individu yang berasal dari kelompok masyarakat bahasa Sunda Serang dengan hanya menggunakan bahasa dan melakukan pemertahanan bahasa yakni dengan menggunakan bahasa

Oleh karena itu berikut rangkuman implementasi kebijakan penyeragaman tarif, dan implementasi kebijakan spesialisasi produksi yang mengacu pada pengimplementasian 12

Pada peneltian ini pengolahan data menggunakan algoritma K-Means untuk mempermudah analis pemasaran memetakkan pelanggan potensial sesuai dengan produk yang ada