I Putu Gede Darmawan

dokumen-dokumen yang mirip
Fungsi Rekursif. Bentuk umum fungsi rekursif.

Perulangan Rekursif dan Perulangan Iteratif

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 1 x 3 x 50 Menit Pertemuan : 3

MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA April 1, 2010 BAB 8 REKURSIF

BAB V Tujuan 5.1 Rekursi Dasar

ALGORITHM. 3 Rekursif Algorithm. Dahlia Widhyaestoeti, S.Kom dahlia74march.wordpress.com

Rekursif. Rekursif adalah salah satu metode dalam dunia matematika dimana definisi sebuah fungsi mengandung fungsi itu sendiri.

Praktikum 6. Konsep Rekursi Perbandingan Perulangan biasa dan Rekursi Implementasi Rekursi dalam Bahasa C

Pemetaan Area (Mapping) Sederhana Implementation with C/C++

Pertemuan 10 REKURSI

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 03

Catatan Kuliah STRUKTUR DATA BAB III REKURSIF

Algoritma Pemrograman 2B (Pemrograman C++)

Algoritma Pemrograman

Pemrograman Dasar L A T I H A N M E T H O D / F U N G S I M E T H O D R E K U R S I F

Achmad Solichin.

Spesifikasi: Ukuran: 14x21 cm Tebal: 225 hlm Harga: Rp Terbit pertama: Februari 2005 Sinopsis singkat:

Achmad Solichin.

Michael Lionardi

Design and Analysis Algorithm

A. TUJUAN PEMBELAJARAN

# FOUR LOOPING. JAWABAN 1. #include <stdio.h> #include <conio.h> #define pi void main(){

Algoritma Pemrograman

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

VI. FUNGSI. Fungsi Main ( ) Fungsi a ( ) Fungsi b ( ) Fungsi c ( ) Fungsi c1 ( ) Fungsi c2 ( ) Fungsi c3 ( ) Bentuk umumnya :

Function Template Pertama - tama mari kita membahas tentang function template.untuk itu marilah kita perhatikan contoh berikut.

KONSEP DASAR. menyusunnya menjadi potongan-potongan mudah untuk ditangani dibanding. conquer.

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

BAB II PROSES REKURSI DAN ITERASI

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET BAHASA PEMROGRAMAN Fungsi : Passing Parameter by Value & Semester 3

Algoritme dan Pemrograman

Apakah Anda sering kesulitan untuk

REKURSIF. Arkham Zahri Rakhman, S.Kom., M.Eng. Rev.: Dr. Fazat Nur Azizah

Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN

Algoritma Pemrograman

PEMROGRAMAN DAN METODE NUMERIK Semester 2/ 2 sks/ MFF 1024

Alpro & Strukdat 1 C++ (Sub Program) Dwiny Meidelfi, S.Kom., M.Cs.

Pertemuan 9: BRANCHING/PERCABANGAN dalam C LOOPING/PERULANGAN/ITERASI dalam C

PERTEMUAN 7 REVIEW (QUIZ)

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

Fungsi 2 DASAR PEMROGRAMAN

Aturan Penulisan Algoritma Setiap Algoritma akan selalu terdiri dari tiga bagian yaitu : Judul (Header) Kamus Algoritma

Design and Analysis of Algorithm

Findra Kartika Sari Dewi

Bahasa C melengkapi fasilitas modular dengan menggunakan fungsi pada setiap SubProgram. Contoh pembagian program menjadi beberapa subprogram.

Pertemuan 4 Diagram Alur / Flowchart

Pernyataan: Background Cover ini menunjukkan Keaslian Ebook ini yang sesuai / sama dengan Cover CD depan aslinya. Dan bila background / Cover setiap

ALGORITMA PEMOGRAMAN SEMESTER GENAP 2017/2018

Program menjadi terstruktur Dapat mengurangi pengulangan kode program. Fungsi dapat diimplementasikan dalam tiga bentuk :

REKURSIF. Dari bahan Dasar Pemrograman oleh: Arkham Zahri Rakhman Rev.: Fazat Nur Azizah

Rosihan Ari Yuana, S.Si, M.Kom Lisensi Dokumen: BAB I. PENDAHULUAN C++ Oleh:

Solusi Rekursif pada Persoalan Menara Hanoi

12/29/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Fungsi. Fungsi. y = f (x) = x m = jumlah ( a, b ) = a + b

A. TUJUAN 1. Memecah program dalam fungsi fungsi yang sederhana. 2. Menjelaskan tentang pemrograman terstruktur.

IT234 ALGORITMA DAN STRUKTUR DATA FUNGSI

Design and Analysis of Algorithms CNH2G3- Week 4 Kompleksitas waktu algoritma rekursif part 1

Konsep Pemrograman. Bab 7. Fungsi1. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

Aplikasi Rekursif dalam Analisis Sintaks Program

Algoritma Pemrograman & Struktur Data

MODUL 10 Fungsi 10.1 Kompetensi 10.2 Alat Dan Bahan: 10.3 Ulasan Teori: Dasar Fungsi Deklarasi Fungsi

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

Search And Insert Problem (Sorted Double Linkedlist Solution)

TUGAS PENDAHULUAN MODUL 12 PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

MODUL V STACK dan PENGENALAN PROCEDURE

MODUL 7 FUNGSI A. Tujuan. B. Petunjuk. C. Dasar Teori

BAB 6. FUNGSI. Tujuan penggunaan fungsi : 1. Program menjadi terstruktur 2. Dapat mengurangi pengulangan kode program.

Gambar 1. Tampilan Layar Sebuah Program Animasi

PEMROGRAMAN BERORIENTASI OBJEK

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

Design and Analysis of Algorithm

Design and Analysis of Algorithms CNH2G3- Week 5 Kompleksitas waktu algoritma rekursif part 2: Metode Karakteristik

BAB X. Struct Dalam C++, kita dapat membuat sebuah tipe data baru. Maka penulisan variabel baru kita akan menjadi:

Berhitung dengan mudah dan cepat menggunakan freeware Eigenmath

Otomasi Shell Script Lanjut

FUNCTIONS. Function adalah satu blok instruksi yang akan dieksekusi ketika dipanggil dari bagian lain dalam suatu program.

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

Algoritma Pemrograman. Fery Updi,M.Kom

Pertemuan 4 Fungsi Rekursif

Fungsi, Parameter, Rekursi

LAPORAN PRAKTIKUM RESMI QUEUE

Imam Fahrur Rozi. Algoritma dan Pemrograman FUNGSI BAG. 2

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

Krisna D. Octovhiana. 1.1 Mengenal Struktur Kontrol.

Algoritma dalam Bahasa C

BAB 6 FUNGSI TUJUAN PRAKTIKUM

FUNGSI. tipe Tipe nilai yang dihasilkan oleh fungsi. Jika tidak dinyatakan, hasil fungsi dianggap bilangan bulat (int)

Kisi- kisi UTS- P. Kisi- kisi UTS- T

Array LOGO. Pendidikan Teknik Elektronika FT UNY. Muh. Izzuddin Mahali, M.Cs.

Analisa dan Perancangan Algoritma. Ahmad Sabri, Dr Sesi 2: 16 Mei 2016

Zaid Romegar Mair Lisensi Dokumen: Gambaran umum : Break statement

Kesalahan Perhitungan Aritmatika Pada Beberapa Program Kalkulator

Tutorial 08 Pertemuan 12

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

Ghandie Kurnia Widi

Kurikulum Qt. { Basic OOP } Chapter 4. Function

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

MODUL PRAKTIKUM. MODUL I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman

TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C

Beberapa Freeware Kalkulator yang Jempolan

Transkripsi:

Cepat Mahir Algoritma dalam C I Putu Gede Darmawan IPGD_BALI@yahoo.com Lisensi Dokumen: Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com. Rekursif Pengenalan Rekursif ialah salah satu teknik pemrograman dengan cara memanggil sebuah fungsi dari dirinya sendiri, baik itu secara langsung maupun tidak langsung. Pemanggilan fungsi rekursif secara langsung berarti dalam fungsi tersebut terdapat statement untuk memanggil dirinya sendiri sedangkan secara tidak langsung berarti fungsi rekursif tersebut memanggil 1 atau lebih fungsi lain sebelum memanggil dirinya sendiri. [ret-val] coba([parameter]) coba([parameter]) Fungsi Rekursif Langsung 1

[ret-val] satu([parameter]) dua([parameter]) [ret-val] dua([parameter]) satu([parameter]) Fungsi Rekursif Tak Langsung Rekursif tidak selalu lebih jelek daripada iteratif. Ada kalanya sebuah fungsi rekursif justru mempermudah penyelesaian masalah yang ditemui pada kasus iteratif (pengulangan) Kelemahan pada proses rekursif antar lain, memerlukan tempat penampungan stack yang cukup besar. Karena setiap kali pemanggilan fungsi, register register seperti cs ( untuk memory far ) dan ip harus disimpan, belum lagi untuk penanganan local variable serta parameter fungsi yang tentunya membutuhkan ruang untuk stack lebih banyak lagi. Selain itu karena setiap pemanggilan fungsi, register dan memory harus di push ke stack maka setelah selesai pemanggilan perlu diadakannya pop stack. untuk mengembalikan memory dan register kembali ke keadaan awal, ini sering disebut sebagai overhead. Proses Rekursif Untuk dapat memahami proses yang terjadi dalam sebuah fungsi rekursif, marilah kita simak contoh fungsi rekursif berikut : void rekursi(int a,int b) if (b == 0) return; a++; b--; printf("masuk -> a = %d b = %d \n",a,b); rekursi(a,b); printf("keluar -> a = %d b = %d \n",a,b); Misalkan Fungsi tersebut dipanggil dengan nilai a = 3 dan b = 3 maka pertama tama di cek apakah b = 0 (if (b == 0) return), jika sama maka keluar. Ternyata nilai b tidak sama dengan 0 maka tambahkan a dengan 1 dan kurangi b dengan 1. Maka keadaan sekarang menjadi a = 4 dan b = 2. Baris berikutnya menampilkan nilai a dan b ke layar (printf("masuk -> a = %d b = %d \n",a,b)). Kemudian panggil fungsi rekursi dengan nilai a = 4 dan b = 2. Langkah langkah tersebut diulang terus sampai pemanggilan fungsi rekursi dengan nilai a = 6 dan b = 0. Pada saat ini kondisi if bernilai benar sehingga fungsi akan keluar (return) dan melanjutkan perintah setelah pemanggilan fungsi rekursi dengan a = 6 dan b = 0. Yaitu mencetak nilai a dan b (printf("keluar -> 2

a = %d b = %d \n",a,b)). Setelah mencetak nilai a dan b maka fungsi rekursif akan keluar lagi, dan melanjutkan perintah setelah pemanggilan fungsi rekursif sebelumnya dimana nilai a = 5 dan b = 1. Demikian seterusnya sampai nilai a = 4 dan nilai b = 2. yang tidak lain pemanggilan fungsi rekurif yang pertama. Proses pemanggilan fungsi rekursif dapat diilustrasikan : 1 2 Rekursi(3,3) Rekursi(4,2) Rekursi(5,1) 6 5 Langkah ke : 1. a = 4 ; b = 2. Cetak : Masuk -> a = 4 b = 2 2. a = 5 ; b = 1. Cetak : Masuk -> a = 5 b = 1 3. a = 6 ; b = 0. Cetak : Masuk -> a = 6 b = 0 4. a = 6 ; b = 0, Cetak : Keluar -> a = 6 b = 0 5. a = 5 ; b = 1, Cetak : Keluar -> a = 5 b = 1 6. a = 4 ; b = 2, Cetak : Keluar -> a = 4 b = 2 3 Rekursi(6,0) 4 Untuk memperjelas lagi penggunaan fungsi rekursif dibawah ini akan di berikan contoh contoh program dengan menggunakan rekursif. Menghitung Nilai Faktorial dan Fibonacci Dengan Rekursif Untuk menghitung nilai faktorial bilangan bulat positif marilah kita daftarkan dulu nilai nilai faktorial untuk mempermudah pengambilan algoritma. 0! = 1 1! = 1 2! = 2 x 1 N! = N x (N 1)! 3! = 3 x 2 x 1 = 3 x 2! 4! = 4 x 3 x 2 x 1 = 4 x 3! Nah dari daftar diatas dapat dibuat fungsi rekursi untuk menghitung nilai faktorial ke n yaitu n > 1 n * Fakt( n 1) Fakt ( n) = n == 0 n == 1 1 Jika di terjemahkan ke dalam bahasa C menjadi : int Fakt(int n) if (n == 1 n == 0) return 1; return n * Fakt(n-1); 3

Untuk Mencari Bilangan Fibonacci juga sama. Sebelumnya mari kita daftarkan dulu bilangan Fibonacci untuk mempermudah pencarian algoritma. 1 1 2 3 5 8 13... Dapat dilihat bahwa Fibo(0) = 1 Fibo(1) = 1 Fibo(2) = Fibo(1) + Fibo(0) = 1 + 1 = 2 Fibo(3) = Fibo(2) + Fibo(1) = 2 + 1 = 3 Maka akan didapat rumusan untuk bilangan Fibonacci berupa : n > 1 Fibo( n 1) + Fibo( n 2) Fibo ( n) = n == 1 n == 0 1 Untuk Listing Program dalam bahasa C saya serahkan ke pembaca sebagai latihan. Menara Hanoi Menara Hanoi ialah salah satu permainan yang dulunya dimainkan oleh seorang pendeta di Hanoi. Tujuan permainan ini ialah memindahkan n buah pringan dari tonggak asal (A) melalui tonggak bantu (B) menuju tonggak tujuan (C).Dengan aturan aturan bahwa piringan yang lebih kecil tidak boleh berada di bawah piringan yang lebih besar. A B C Menara Hanoi dengan 3 buah piringan Seperti biasa untuk memecahkan masalah kita daftarkan dulu langkah langka yang diambil mulai n = 1. Dengan dfinisi piringan yang paling atas ialah piringan 1. Untuk n = 1 : - Pindahkan piringan 1 dari A ke C Untuk n = 2 : - Pindahkan piringan 1 dari A ke B - Pindahkan piringan 2 dari A ke C - Pindahkan piringan 3 dari B ke C 4

Dari contoh diatas dapat diambil kesimpulan, untuk memindahkan N piringan dari tonggak asal (A) ke tonggak tujuan (C) maka piringan ke N harus berada di tonggak tujuan (C), sedangkan piringan ke 1 sampai (N - 1) harus berada di tonggak bantu (B). Setelah piringan ke 1 sampai (N-1) berada pada tonggak bantu (B), kemudian pindahkan piringan ke 1 sampai (n-1) tersebut dari tonggak bantu (B) ke tonggak tujuan (C) Nah bagaimana caranya membawa piringan ke 1 sampai (N-1) dari tonggak asal ke tonggak bantu (B), caranya sama saja yaitu dengan memindahkan piringan ke (n-1) dari tonggak asal (A) ke tonggak tujuan yang pada saat ini berada pada tonggak (B) sedangkan piringan dari 1 sampai ke (N- 2) dipindahkan ke tonggak bantu yang saat ini berada di tonggak (C), Setelah piringan ke 1 sampai (N-2) berada pada tonggak bantu (C), kemudian pindahkan piringan ke 1 sampai (N-2) ke tonggak tujuan (B) dan seterusnya. Metode penyelesaian permainan Hanoi diatas sering disebut sebagai metode back tracking, jadi solusi dicari dengan cara mundur ke belakang dahulu, baru kemudian solusi bisa di temukan. Berikut Listing program Menara Hanoi dalam bahasa C #include <stdio.h> void Hanoi(int n,char asal,char bantu,char tujuan) // pindahkan piringan ke n // dari asal menuju tujuan // melalui bantu if (n == 0) return; Hanoi(n-1,asal,tujuan,bantu); //pindahkan piringan ke n-1 // dari asal ke bantu melalui //tonggak tujuan printf("pindahkan piringan ke %d ke dari %c ke %c\n",n,asal,tujuan); Hanoi(n-1,bantu,asal,tujuan); //pindahkan piringan ke n 1 // dari bantu menuju tujuan // melalu asal int main(void) int n; printf("jumlah piringan? "); scanf("%d",&n); Hanoi(n,'a','b','c'); return 0; 5

Berikut Hasil dari program diatas. Jumlah piringan? 3 Pindahkan piringan ke 1 ke dari a ke c Pindahkan piringan ke 2 ke dari a ke b Pindahkan piringan ke 1 ke dari c ke b Pindahkan piringan ke 3 ke dari a ke c Pindahkan piringan ke 1 ke dari b ke a Pindahkan piringan ke 2 ke dari b ke c Pindahkan piringan ke 1 ke dari a ke c 6