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

dokumen-dokumen yang mirip
BAB V Tujuan 5.1 Rekursi Dasar

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

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

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

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

Fungsi Rekursif. Bentuk umum fungsi rekursif.

PRAKTIKUM 6 PENGULANGAN PROSES 2

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

I Putu Gede Darmawan

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

Algoritma Pemrograman 2B (Pemrograman C++)

Praktikum 4. Tumpukan (Stack)

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

A. TUJUAN PEMBELAJARAN

MODUL PRAKTIKUM TI014 STRUKTUR DATA Season 1

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

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

A. TUJUAN PEMBELAJARAN

Rekursif/ Iterasi/ Pengulangan

Algoritme dan Pemrograman

Algoritma dan Pemrograman. Loop control structures: WHILE. Loop control structures: WHILE Perhatikan potongan program berikut: 12/29/2011

Pencarian (Searching)

Proses Perulangan (Looping) DASAR PROGRAMMING 1

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

PERTEMUAN 7 REVIEW (QUIZ)

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

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

Algoritma Pemrograman

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

Looping : break, continue, nested loop

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

STRUKTUR DASAR ALGORITMA DAN PEMROGRAMAN STMIK AMIKOM YOGYAKARTA

LAPORAN PRAKTIKUM PEMROGRAMAN DASAR TIPE-TIPE FUNGSI ATAU METHOD

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

A. TUJUAN PEMBELAJARAN

Struktur Kontrol. 1.Pemilihan (Selection) 2.Pengulangan (Repetition)

BAB V FUNGSI Tujuan : 5.1 Dasar Fungsi

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

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

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

BAB 6 FUNGSI TUJUAN PRAKTIKUM

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

c. Membeli komputer d. Proses 2. Sebuah prosedur langkah demi langkah yang pasti untuk menyelesaikan sebuah masalah disebut : a. Proses b.

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

TEORI KONSEP PEMPROGRAMAN 3.1

Konsep Pemrograman Praktikum 14 Fungsi : Parameter Fromal & Aktual

MATERI/BAHAN PRAKTIKUM FUNGSI

Praktikum 4 PENGULANGAN PROSES

A. TUJUAN PEMBELAJARAN

BAB II PROSES REKURSI DAN ITERASI

Tumpukan(Stack)!! " # $ %&' $ %& ( ) ( * +, / ( (

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

BAB VII ALGORITMA DIVIDE AND CONQUER

ALGORITMA (KOMPUTER) : ATURAN PENULISAN DAN STRUKTUR DASARNYA

Praktikum 5 PERULANGAN PROSES

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

Selection, Looping, Branching

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LABSHEET ALGORITMA DAN STRUKTUR DATA

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

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

Algoritma Pemrograman

Fungsi : Dasar Fungsi

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

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

IT234 - Algoritma dan Struktur Data. Ramos Somya

Struktur Kontrol. (Repetition) 1. Pemilihan (Selection) 2. Pengulangan

A. TUJUAN 1. Menjelaskan tentang prinsip dasar fungsi. 2. Menjelaskan tentang.parameter formal dan parameter aktual

Aplikasi Rekursif dalam Analisis Sintaks Program

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

Perulangan, Percabangan, dan Studi Kasus

Politeknik Elektronika Negeri Surabaya

Apakah Anda sering kesulitan untuk

Belajar Rekursif di Java

ALGORITMA PEMOGRAMAN SEMESTER GENAP 2017/2018

Praktikum 8. Pengurutan (Sorting) Bubble Sort, Shell Sort

Praktikum Dasar Pemrograman

Algoritma Pemrograman. Rekursif & GUI Programming I

Pemrograman Fery Updi,M.Kom

Politeknik Elektronika Negeri Surabaya

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

PEMROGRAMAN BERORIENTASI OBJEK

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

a[0] a[1] a[2] a[3] a[4] a[5] x

STRATEGI DIVIDE AND CONQUER

Pemrograman Dasar C. Minggu 6

SUB PROGRAM (FUNGSI)

REVIEW ARRAY. Institut Teknologi Sumatera

ALGORITMA & PEMROGRAMAN II ARRAY

Pengumuman Pekan ke- 5

Gambar 13.1 Ilustrasi proses algoritma sorting

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK AMIKOM YOGYAKARTA

Pengulangan for. Konstruksi for. keberadaan exp1, exp2, dan exp3 bersifat optional. for (exp1; exp2; exp3){ statement; atau. statement1; statement2;

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LABSHEET ALGORITMA DAN STRUKTUR DATA

Algoritme dan Pemrograman

Struktur Kontrol Perulangan (Loop) Algoritme dan Pemrograman. Struktur Kontrol Perulangan: while. Struktur Kontrol Perulangan: while

IT234 - Algoritma dan Struktur Data. Ramos Somya

Pertemuan 06. Dasar Pemrograman Komputer [TKL-4002] 2010

Latihan & Kisi-kisi UTS DASAR PEMROGRAMAN

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

Transkripsi:

Praktikum 6 Rekursi POKOK BAHASAN: Konsep Rekursi Perbandingan Perulangan biasa dan Rekursi Implementasi Rekursi dalam Bahasa C TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: Memahami rekursi sebagai konsep yang dapat digunakan untuk merumuskan solusi sederhana dalam sebuah permasalahan yang sulit untuk diselesaikan secara iteratif dengan menggunakan loop for, while do. Membantu mahasiswa bagaimana "berpikir secara rekursif" Mengidentifikasi permasalahan-permasalahan pemrograman yang bisa diselesaikan dengan menggunakan rekursi, sekaligus menyelesaikannya DASAR TEORI: Rekursi mempunyai arti suatu proses yang bisa memanggil dirinya sendiri. Dalam sebuah rekursi sebenarnya tekandung pengertian sebuah prosedur atau fungsi. Perbedaannya adalah bahwa rekursi bisa memanggil dirinya sendiri, kalau prosedur atau fungsi harus diipanggil melalui pemanggil prosedur atau fungsi. Untuk memulai bahasan rekursi, kita membahas sebuah masalah sederhana yang kemungkinan kita tidak berpikir untuk menyelesaikan dengan cara rekursif. Yaitu permasalahan faktorial, yang mana kita menghitung hasil faktorial dari sebuah bilangan, yaitu n. Faktorial dari n (ditulis n!), adalah hasil kali dari bilangan tersebut dengan bilangan di bawahnya, di bawahnya hingga bilangan 1. Sebagai contoh, 4! = 67

PRAKTIKUM 6 REKURSI 68 (4)(3)(2)(1). Salah satu cara untuk menghitung adalah dengan menggunakan loop, yang mengalikan masing-masing bilangan dengan hasil sebelumnya. Penyelesaian dengan cara ini dinamakan iteratif, yang mana secara umum dapat didefinisikan sebagai berikut: n! = (n)(n-1)(n-2) (1) Cara lain untuk menyelesaikan permasalahan di atas adalah dengan cara rekursi, dimana n! adalah hasil kali dari n dengan (n-1)!. Untuk menyelesaikan (n-1)! adalah sama dengan n!, sehingga (n-1)! adalah n-1dikalikan dengan (n-2)!, dan (n-2)! adalah n-2 dikalikan dengan (n-3)! dan seterusnya sampai dengan n = 1, kita menghentikan penghitungan n! Cara rekursif untuk permasalahan ini, secara umum dapat kita detailkan sebagai berikut: F(n) = 1 jika n=0, n=1 nf(n-1) jika n>1 Dengan demikian ada tiga syarat yang harus dipenuhi agar suatu permasalahan dapat diselesaikan secara rekursif: 1. Permasalahan dapat dipecah menjadi lebih sederhana. Seperti dicontohkan untuk permasalahan faktorial di atas, 4! = 3! * 4. Dari permasalahan ini dapat dijelaskan bahwa 4! dapat dipecah dengan melibatkan faktorial yang lebih sederhana, yaitu 3!. 2. Karena dengan rekursi kita memanggil fungsi secara berulang-ulang, maka harus ada suatu kondisi yang mengakhiri prosesnya. Jika tidak, maka proses tidak akan pernah berhenti sampai memori yang digunakan tidak dapat menampung lagi. Pada percobaan 1 merupakan contoh program rekursi yang tidak pernah berhenti karena tidak ada kondisi yang menghentikan prosesnya. Bandingkan dengan percobaan 2 yang mempunyai kondisi pengakhiran rekursi, yaitu jika nilai N sudah lebih kecil atau sama dengan nol. Sedangkan untuk rekursi pada fungsi faktorial, kondisi jika n=0 merupakan batas akhir proses rekursi dari fungsi tersebut. 3. Ada bagian program yang melakukan pemanggilan terhadap dirinya sendiri.

PRAKTIKUM 6 REKURSI 69 Berikut ini adalah suatu permasalahan yang dapat kita selesaikan dengan menggunakan proses rekursif. Yaitu deret fibonaci yang mempunyai nilai suku-suku bilangan sebagai berikut: 0, 1, 1, 2, 3, 5, 8, 13, 21, Ciri khusus deret ini adalah tiap-tiap nilai suku adalah hasil penjumlahan dari nilai dua suku sebelumnya. Nilai suku ke-3 adalah penjumlahan dari nilai suku ke-1 (bernilai 1)ditambah dengan nilai suku ke-2 (bernilai 1). Deret ini dimulai dari nilai suku ke nol yang bernilai nol. Suku ke-1 juga bernilai 1, sehingga suku ke-0 dan 1 bernilai sama dengan nilai urutannya. Cara rekursif untuk permasalahan ini, secara umum dapat kita detailkan sebagai berikut: F(n) = n jika n=0, n=1 F(n-2) + F(n-1) jika n>1 Rekursi ini jarang dipakai, diantaranya disebabkan: - Membuat fungsi sulit dipahami. Algoritma ini hanya cocok untuk persoalan tertentu saja (misalnya pada binary tree atau pohon biner). Bandingkan program pada percobaan 3 dan percobaan 4. Kita akan lebih mudah membaca program pada percobaan 3. - Memerlukan stack dengan ukuran yang lebih besar. Sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack dan adakalanya akan menyebabkan stack tak cukup lagi. - Untuk kasus-kasus tertentu, algoritma ini mempunyai kelemahan. Kelemahan ini terleetak pada suatu proses yang sudah pernah dilakukan akan diproses kembali, sehingga membuat proses menjadi lebih lama dan tidak perlu. Contoh proses rekursi yang mengandung kelemahan misalnya adalah proses untuk mengitung nilai suku deret fibonaci seperti yang sudah dijelaskan di atas.

PRAKTIKUM 6 REKURSI 70 TUGAS PENDAHULUAN Buatlah flowchart untuk permasalahan yang diberikan pada latihan soal no 5 di bawah ini sebagai Tugas Pendahuluan. PERCOBAAN 1. Buatlah workspace untuk praktikum Struktur Data dengan menggunakan Visual C++. 2. Buatlah project untuk praktikum KEENAM. 3. Cobalah untuk masing-masing percobaan di bawah ini. 4. Selesaikan soal-soal yang ada dan mengimplementasikan flowchart yang anda buat pada Tugas Pendahuluan. Percobaan 1 : Fungsi Rekursi tanpa Batas Akhir void Tidak_Berhenti(); main() Tidak_Berhenti(); void Tidak_Berhenti() printf("ctrl-break untuk berhenti.\n"); Tidak_Berhenti(); Percobaan 2 : Fungsi Rekursi dengan Batas Akhir void Berhenti_N_Kali(int n); main() int N=3; Berhenti_N_Kali(N); void Berhenti_N_Kali(int n) static int i=0;

PRAKTIKUM 6 REKURSI 71 if (n<=0) return; printf("%d kali\n",++i); Berhenti_N_Kali(n-1); Percobaan 3 : Menghitung Nilai Faktorial dengan Menggunakan Perulangan int fact_it (int n) int i,fak; /****************************************************** * Menghitung sebuah faktorial dengan proses looping * ******************************************************/ temp = 1; for (i=1; i<=n; i++) fak = fak * i; return (fak); void main() int fac; printf("masukkan berapa faktorial : "); scanf("%d",&fac); printf("hasil faktorial dari adalah : %d ", fact_it(fac)); printf('\n'); Percobaan 4 : Menghitung Faktorial dengan Menggunakan Rekursif int fact_rec(int n) /*********************************************************** * Menghitung sebuah faktorial secara rekursif * ***********************************************************/ if (n < 0) return 0; else if (n == 0) return 1; else if (n == 1) return 1;

PRAKTIKUM 6 REKURSI 72 else return n * fact_rec(n-1); void main() int fac; printf("masukkan berapa faktorial : "); scanf("%d",&fac); printf("hasil faktorial dari adalah : %d ", fact_rec(fac)); printf('\n'); Percobaan 5 : Menampilkan Deret Fibonaci dengan Rekursif int Fibonaci(int N); void main() int i, N; printf("masukkan batas akhir dari bilangan fibonaci : "); scanf("%d",&n); for (i=0; i<=n; i++) printf("%d, ",Fibonaci(i)); int Fibonaci(int N) if (N<2) return (N); else return(fibonaci(n-2)+fibonaci(n-1)); LATIHAN 1. Buatlah sebuah fungsi yang menulis angka dari n ke 0 dengan menggunakan proses rekursi. 2. Tuliskan sebuah fungsi untuk menulis anka dari 0 ke n dengan menggunakan proses rekursi.

PRAKTIKUM 6 REKURSI 73 3. Tuliskan sebuah fungsi rekursi yang melakukan pengecekan apakah sebuah elemen X merupakan anggota dari sebuah array a[n]. 4. Tuliskan fungsi rekursi untuk membalik suatu kalimat. Sebagai contoh, kalimat 'Struktur Data' dibalik menjadi 'atad rutkurts'. Fungsi rekursi ini menerima parameter bertipe string dan mengembalikan string hasil pembalikan. 5. Tulis sebuah fungsi yang melakukan pengecekan apakah sebuah angka merupakan bilangan prima atau bukan (n bukan bilangan prima jika dapat dibagi dengan angka kurang dari n)