• Tidak ada hasil yang ditemukan

Rekursi dalam Pemrograman

N/A
N/A
EDSEL YUSUF

Academic year: 2024

Membagikan "Rekursi dalam Pemrograman"

Copied!
27
0
0

Teks penuh

(1)

2: Rekursi

Alvin Tjondrowiguno

(2)

Segitiga Sierpinski

Hal yang rekursif adalah sesuatu

yang definisinya mencakup dirinya sendiri

(3)

Dalam pemrograman, rekursi adalah ketika suatu fungsi memanggil dirinya sendiri

(4)

"Tumpukan Panggilan"

(5)

• Push: Menambahkan item baru ke atas

• Pop: Hapus item paling atas dengan 2 operasi utama:

Tumpukan adalah struktur data berurutan

tumpukan

dari tumpukan

(6)

otomatis dikelola oleh

fungsi yang sedang aktif di a

• Tumpukan panggilan disembunyikan dan tentang subrutin mana /

program

struktur yang menyimpan informasi

• Tumpukan panggilan adalah tumpukan data

penyusun

(7)

A() dorongan

utama()

(8)

A()

B() dorongan

utama()

(9)

C()

utama() B()

dorongan

A()

(10)

B()

utama() C()

muncul

A()

(11)

A() B()

muncul

utama()

(12)

A()

muncul

utama()

(13)

...

Halo()

utama()

Halo()

Halo()

(14)

Pengulangan

(15)

= 6*120 = 720

*

6! = 6*5

5! = *

* 2

2 1 = 120

* 1 = 720

4 *

*

3

5 4 3

6! = 6*5!

* *

(16)

N! = n * (n-1)!

kembali n }

* faktorial(n-1);

faktorial int statis publik(n) {

System.out.println(faktorial(6));

public static void main(String args[]) {

}

(17)

“Kasus dasar”

“Kasus rekursif”

TAPI 1! = 1 N! = n * (n-1)!

kembali 1;

* faktorial(n-1);

jika (n == 1)

faktorial int statis publik(n) {

kembali n

(18)

jika (n == 1)

* faktorial(n-1);

kembali 1;

faktorial int statis publik(n) {

kembali n }

faktorial(6)

utama()

faktorial(6)

utama() faktorial(1)

faktorial(5) faktorial(5)

faktorial(1)

... ...

(19)

fibo(1) = 1, fibo(2) = 1, fibo(3) = 2, fibo(4) = 3, fibo(5) = 5, …

fibo(1) = fibo(2) = 1

fibo(i) = fibo(i - 1) + fibo(i - 2) 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …

// kasus rekursif

// kasus dasar

(20)

fibo(3)

fibo(2)

fibo(2) fibo(4)

fibo(1) fibo(3)

fibo(5)

fibo(1)

fibo(2)

(21)

hasil = 1 kembali (n * faktorial(n - 1))

untuk saya = n ke 1:

Mana yang menggunakan lebih banyak memori?

jika n == 1: kembalikan 1

faktorial(n):

faktorial(n):

Mana yang lebih cepat?

hasil = hasil * i

jumlah perkalian

Petunjuk: Unit dasar memori adalah

Petunjuk: Operasi dasarnya adalah

(22)

• Fungsi rekursif memerlukan setidaknya satu kasus dasar dan satu kasus rekursif

• Rekursi secara umum sama efisiennya dengan waktu seperti perulangan, namun kurang efisien dalam ruang

• Memanggil terlalu banyak fungsi tanpa kembali menyebabkan kesalahan stack overflow

• Rekursi lebih mudah dipahami setelah memahami tumpukan panggilan

penyelesaian masalah yang sama tetapi lebih kecil

• Rekursi selalu dapat digantikan dengan loop dan stack

• Rekursi harus dipertimbangkan ketika suatu masalah dapat diselesaikan dengan menggunakan

(23)

“Untuk memahami rekursi, Anda harus memahami rekursi terlebih dahulu.”

(24)

Menara Hanoi

Contoh Soal:

(25)

disk yang lebih kecil

• Hanya satu disk yang dapat dipindahkan pada a

• Disk yang lebih besar tidak dapat diletakkan di atasnya kutub lain (misalnya dari A ke C)

waktu, dari satu kutub ke kutub lainnya pindahkan semua disk dari satu kutub ke

• Tujuan dari permainan ini adalah untuk

B

A C

(26)

C

Kasus dasar B

A

Rekursif

kasus

1 2 3

• Pindahkan apapun yang ada di atas disk ke-n ke kutub sementara B

• Pindahkan semua piringan pada tiang sementara B ke atas tiang C

• Untuk memindahkan n disk dari kutub A ke kutub C, solusi umumnya adalah:

Solusi rekursif untuk Menara Hanoi:

• Pindahkan disk ke-n ke kutub C yang kosong

• Namun jika disk yang ada hanya 1 (n == 1), langsung pindahkan disk tersebut dari A ke C

(27)

Minggu depan: Algoritme dasar: Penyortiran dan pencarian

Terima kasih untuk mendengarkan!

Referensi

Dokumen terkait

Dalam perkuliahan dibahas: Pengenalan Matlab, Konsep Dasar Pemrograman Matlab, Struktur kendali perulangan dan percabangan, Pemrograman grafik, Aplikasi Matlab

Dalam kuliah ini dipelajari tentang konsep dasar pemrograman komputer, struktur data, analisis dan perancangan, notasi penulisan, pemrograman visual

PT/OHP/LCD/PC 31 Memecahkan persoalan ke dalam konsep berbasis obyek Proyek 1 Mengimplementasikan UML ke dalam pemrograman sesuai dengan konsep pemrograman berbasis obyek

Modul utama yang dimaksud adalah modul yang pertama kali dijalankan atau modul yang memanggil modul lainnya atau juga modul yang mengakhiri proses program tersebut..

Sedangkan pemrograman fungsional tidak memiliki aktivitas, hanya definisi- definisi fungsi sehingga tidak memerlukan percabangan.tetapi tetap ada kemungkinan untuk

Ketepatan pelaksanaan pemrograman dari proses pengolahan data spasial 15% 8 UJIAN TENGAH SEMESTER 9 Mahasiswa mampu menjelaskan C2 konsep modularisasi dalam pemrograman dan mampu

Dokumen ini membahas tentang beberapa konsep dasar dalam pemrograman

Dokumen ini menjelaskan tentang konsep variabel dalam bahasa pemrograman