Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Outline. Apa itu Recursion? Recursion

dokumen-dokumen yang mirip
Struktur Data & Algoritme (Data Structures & Algorithms)

Struktur Data dan Algoritma

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

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

Review. Struktur Data & Algoritme (Data Structures & Algorithms) Objectives. Outline. Stacks & Queues

Outline. Struktur Data & Algoritme (Data Structures & Algorithms) Pengantar. Definisi. 2-3 Trees

Pertemuan 4 Fungsi Rekursif

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

Struktur Data & Algoritme (Data Structures & Algorithms)

Design and Analysis Algorithm

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

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

Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Sort. Outline. Bubble Sort: idea. Bubble Sort. Sorting

Rekursif. Proses yang memanggil dirinya sendiri. Merupakan suatu fungsi atau prosedur Terdapat suatu kondisi untuk berhenti.

Fungsi Rekursif PEMROGRAMAN DASAR. Dr. Eng. Herman Tolle, ST., MT. Sistem Informasi PTIIK UB Semester Ganjil 2014/2015

MODUL PRAKTIKUM TI014 STRUKTUR DATA Season 1

Struktur Data & Algoritma

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

PROCEDURE DAN FUNCTION

Gedung bisa diibaratkan sebagai fungsi main() sedangkan bagian yang lebih kecil merupakan fungsi yang menyelesaikan tugas tertentu.

Algoritma Pemrograman 2B (Pemrograman C++)

Recursion, Algoritma, Struktur Data. Recursion. Erick Pranata. Edisi I

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

Recursion, Algoritma, Struktur Data. Recursion. Erick Pranata. Edisi II

Algoritme dan Pemrograman

Struktur Data & Algoritme (Data Structures & Algorithms)

Refreshing Materi Kuliah Semester Pendek 2010/2011. Logika dan Algoritma. Heri Sismoro, M.Kom.

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

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

Soal Ujian Akhir Semester Pendek TA. 2006/2007 D3-Manajemen Informatika

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

Pemgrograman Modular. Keuntungan:

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

SUB PROGRAM (FUNGSI)

BAB V Tujuan 5.1 Rekursi Dasar

Struktur Data dan Algoritma

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

Struktur Data & Algoritme (Data Structures & Algorithms)

Struktur Data dan Algoritme. Struktur Data & Algoritme (Data Structures & Algorithms) Struktur Data dan Algoritme. Objectives.

Pertemuan Function. Obyektif Praktikum : 1. Mengerti konsep dasar penggunaan Function

UJIAN AKHIR SEMESTER GANJIL 2005/2006 ALGORITMA & STRUKTUR DATA / CS2014

Pemrograman Dasar M E T H O D / F U N G S I

Algoritma. Begin at the beginning and go on /ll you come to the end: then stop. Lewis Caroll, Alice s Adventures in Wonderland, 1865

Fungsi Rekursif. Bentuk umum fungsi rekursif.

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

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

IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

Pertemuan 10 REKURSI

Optimasi Perhitungan Bilangan Fibonacci Menggunakan Program Dinamis

Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatika

Pemrograman Lanjut. Instance Variable Access Modifier Set dan Get Method

Function. Function adalah satu blok instruksi yang dieksekusi ketika dipanggil dari bagian lain dalam suatu program. Format dari function :

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS

Sorting. Struktur Data dan Algoritma. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI

(3) BAHAN KAJIAN (materi ajar)

Setelah mempelajari topik Analisis Algoritma di kuliah SDA, ada beberapa kompetensi yang perlu Anda kuasai:

LAPORAN PRAKTIKUM PEMROGRAMAN DASAR TIPE-TIPE FUNGSI ATAU METHOD

Contoh function 1 : Output : // function example The result is 8 #include <iostream.h>

Struktur Data & Algoritma

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

INF-103 Pemrograman II FUNGSI C++ Dr. Taufik Fuadi Abidin, M.Tech Irvanizam, M.Sc. Program Studi Informatika FMIPA UNIVERSITAS KUALA

Recursion Properties. Factorial: MaxSubseqSum Recursive version. MaxSubseqSum Recursive version

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

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

Rekursif. Overview. Tujuan Instruksional

DIG1G3 Implementasi Struktur Data

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER JAKARTA STI&K SATUAN ACARA PERKULIAHAN

JAVA BASIC PROGRAMMING Joobshet

MODUL. Fungsi (Function) Modul Praktikum C++ Dasar Pemrograman Komputer JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK

FUNGSI II. Variabel Statis. Sifat variabel statis: Sintaks: static tipe_data nama_variabel; Contoh: static int angka;

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

I Putu Gede Darmawan

Penyelesaian Barisan Rekursif dengan Kompleksitas Logaritmik Menggunakan Pemangkatan Matriks

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

MODUL 6 PERULANGAN. A. String. 1. Instansiasi dan Inisialisasi. M0601xxyyy.jar

Modul 3 Percabangan dan Perulangan

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA FAKULTAS ILMU KOMPUTER UNIVERSITAS BRAWIJAYA

Percabangan & Perulangan

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

MODUL ALGORITMA DAN PEMROGRAMAN. STMIK AMIKOM Yogyakarta. Rajif Agung Yunmar, S.Kom., M.Cs.

Pemrograman Berbasis Objek Operator dan Assignment

KONSEP OOP: POLYMORPHISM

Pemrograman Berorientasi. Class dan Obyek 2

Algoritma dan Struktur Data

MEMBUAT KELAS SENDIRI. Dewi Sartika, M.Kom

Badiyanto, S.Kom., M.Kom. PBO java

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

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

Apakah Anda sering kesulitan untuk

Organisasi Sistem Komputer. Prosedur. Sekolah Teknik Elektro dan Informatika ITB

MODUL 2 STRUKTUR KONTROL

Outline STRUKTUR DATA. VII. Sorting

Modul 2. [access specifier] [tipe data] [nama variabel];

KONSEP OOP: POLYMORPHISM

BAB 6. Struktur Kontrol

MA2111 PENGANTAR MATEMATIKA Semester I, Tahun 2015/2016. Hendra Gunawan

if (ekspresi_boolean) { Pernyataan1; } else { Pernyataan2; }

Struktur Data dan Algoritma

APLIKASI PEMROGRAMAN DINAMIS UNTUK MEMAKSIMALKAN PELUANG MEMENANGKAN PERMAINAN PIG

Transkripsi:

Struktur Data & Algoritme (Data Structures & Algorithms) Objectives Memahami lebih dalam method rekursif Dapat membuktikan bahwa sebuah method rekursif sudah benar dengan menggunakan induksi matematik Recursion Denny (denny@cs.ui.ac.id) Suryana Setiawan (setiawan@cs.ui.ac.id) Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 2004/2005 Version 2.0 - Internal Use Only SDA/TOPIC/V2.0/2 Outline Apa itu recusion/rekursif? Recursion rules Induksi Matematik Apa itu Recursion? Method yang memanggil dirinya sendiri baik secara langsung maupun secara tidak langsung. f(0) = 0; f(x) = 2 f(x-1) + x 2 f(1) = 1; f(2) = 6; f(3) = 21; f(4) = 58 fib(n) = fib(n - 1) + fib(n - 2) public static int f (int x) if (x == 0) return 0; return 2 * f (x - 1) + x * x; SDA/TOPIC/V2.0/3 SDA/TOPIC/V2.0/4 1

Method/Fungsi Recursion Fungsi yang memanggil dirinya, secara langsung atau lewat fungsi lain, disebut fungsi rekursif Proses pemanggilan diri itu disebut rekursi (recursion). Contoh: Memangkatkan bilangan real tak nol dengan suatu pangkat bilangan bulat x n 1 = x x 1 x n 1 n jika n = 0 jika n > 0 jika n < 0 SDA/TOPIC/V2.0/5 /** Menghitung pangkat sebuah bilangan real (versi rekursif). @param x bilangan yang dipangkatkan (x!= 0) @param n pangkatnya */ public static double pangkatrekursif (double x, int n) if (n == 0) return 1.0; else if (n > 0) return (x * pangkatrekursif (x, n - 1)); else return (1 / pangkatrekursif (x, -n)); SDA/TOPIC/V2.0/6 Recursive calls Berapa nilai pangkat 4-2? pangkatrekursif (4.0, -2) return (1 / pangkatrekursif (4.0, 2)); 16.0 pangkatrekursif (4.0, 2) return (4.0 * pangkatrekursif (4.0, 1)); 4.0 pangkatrekursif (4.0, 1) return (4.0 * pangkatrekursif (4.0, 0)); pangkatrekursif (4.0, 0) return 1.0; 0.0625 1.0 Returning values Algoritme Rekursif Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat di-reduksi menjadi satu atau lebih masalah-masalah serupa yang lebih kecil Secara umum, algoritme rekursif selalu mengandung dua macam kasus: kasus induksi: satu atau lebih kasus yang pemecahan masalahnya dilakukan dengan menyelesaikan masalah serupa yang lebih sederhana (yaitu menggunakan recursive calls) kasus dasar atau kasus penyetop: satu atau lebih kasus yang sudah sederhana sehingga pemecahan masalahnya tidak perlu lagi menggunakan recursive-calls. Supaya tidak terjadi rekursi yang tak berhingga, setiap langkah rekursif haruslah mengarah ke kasus penyetop. SDA/TOPIC/V2.0/7 SDA/TOPIC/V2.0/8 2

Recursion Rules Punya kasus dasar Kasus yang sangat sederhana yang dapat memproses input tanpa perlu melakukan rekursif (memanggil method) lagi Rekursif mengarah ke kasus dasar Pada proses pemanggilan rekursif, asumsikan bahwa pemanggilan rekursif (untuk problem yang lebih kecil) adalah benar. Contoh: pangkatrekursif (x, n) Asumsikan: pangkatrekursif (x, n - 1) menghasilkan nilai yang benar. Nilai tersebut harus diapakan sehingga menghasilkan nilai pangkatrekursif (x, n) yang benar? Jawabannya: dikalikan dengan x Infinite Recursion public static int bad (int n) if (n == 0) return 0; return bad (n * 3-1) + n - 1; SDA/TOPIC/V2.0/9 SDA/TOPIC/V2.0/10 How it works? Java VM menggunakan internal stack of activation records Activation record dapat dilihat sebagai kertas yang berisi informasi tentang method nilai parameter variabel lokal program counter (PC) How it works? Ketika suatu method G dipanggil, sebuah activation record untuk G dibuat dan di-push ke dalam stack; saat ini G adalah method yang sedang aktif Ketika method G selesai (return), stack di-pop; method dibawah G yang dipanggil. SDA/TOPIC/V2.0/11 SDA/TOPIC/V2.0/12 3

Too Much Recursion public static long s (int n) if (n == 1) return 1; else return s (n - 1) + n; Di sebuah system, n >= 9410 tidak dapat dieksekusi Pembuktian dgn Induksi Contoh kasus: pangkatrekursif (x,n) Buktikan bahwa base case benar. pangkatrekursif (x,0) = 1 Buktikan bahwa inductive case benar smaller instances of the same problem may be assumed to work correctly. asumsikanbahwapangkatrekursif (x, n-1) memberikan nilai x n-1 apakah pangkatrekursif (x, n) mengembalikan nilai yang benar? pangkatrekursif (x, n) = pangkatrekursif (x, n-1) * x x n= x n-1 * x SDA/TOPIC/V2.0/13 SDA/TOPIC/V2.0/14 Fibonacci numbers F 0 = 0, F 1 = 1, F N = F N-1 + F N-2 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,... Fibonacci numbers For N = 40, F N takes over 300 million recursive calls. F 40 = 102.334.155 Growth rate: exponential!!! Rule: never duplicate work by solving the same instance of a problem in separate recursive calls. public static int fib1 (int n) if (n <= 1) return n; return fib1 (n 1) + fib1 (n 2); Ide: simpan nilai fibonacci yang sudah dihitung dalam sebuah array SDA/TOPIC/V2.0/15 SDA/TOPIC/V2.0/16 4

Fibonacci numbers Fibonacci numbers public static int fib2 (int n) if (n <= 1) return n; int result[] = new int[n + 1]; result[0] = 0; result[1] = 1; for (int ii = 2; ii <= n; ii++) result[ii] = result[ii - 2] + result[ii - 1]; return result[n]; Dynamic Programming solves sub-problems nonrecursively by recording answers in a table public static int fib3 (int n) if (n <= 1) return n; int fib1 = 0; int fib2 = 1; int result; for (int ii = 2; ii <= n; ii++) result = fib2 + fib1; fib1 = fib2; fib2 = result; return result; SDA/TOPIC/V2.0/17 SDA/TOPIC/V2.0/18 Kesalahan Umum Base case terlalu kompleks Progress tidak menuju base case Aturan tambahan: hindari duplikasi proses untuk nilai input yang sama dalam recursive call yang terpisah. Summary Method rekursif adalah method yang memanggil dirinya sendiri baik secara langsung maupun secara tidak langsung. Recursion rules Have a base case: yang dapat memproses input tanpa perlu recursive lagi Make progress to the base case Always assume that the recursive call works never duplicate work by solving the same instance of a problem in separate recursive calls. SDA/TOPIC/V2.0/19 SDA/TOPIC/V2.0/20 5

Further Reading Chapter 7 What s Next Data Structure - Chapter 6 SDA/TOPIC/V2.0/21 SDA/TOPIC/V2.0/22 6