Anda di halaman 1dari 12

MODUL PRAKTIKUM 8

ALGORITMA DAN STRUKTUR DATA


INF1008

Nama : Aldiannur
Nim : 1911102441077

Teknik Informatika
Fakultas Sains & Teknologi
Universitas Muhammadiyah Kalimantan Timur
Samarinda, 2020
Praktikum 8:
Rekursi
Pokok Bahasan:
 Rekursi.
Tujuan Pembelajaran:
 Memahami implementasi algoritma rekursi menggunakan Python.
 Memahami implementasi algoritma rekursi secara visualisasi.
 Memahami kompleksitas permasalahan algoritma rekursi.
Rekursi:

Percobaan & Latihan 8.1


Jalankan fungsi dan perintah listsum_A berikut!

Jalankan fungsi dan perintah listsum_B berikut!

Soal :
a) Berikan tampilan output dan jelaskan perbaris dari kedua program diatas!
b) Berikan hasil analisa anda mengenai kedua program diatas!
c) Salah satu program diatas menggunakan algoritma rekursi, tentukan fungsi yang
mana dan baris keberapa yang menunjukkan bahwa fungsi tersebut menggunakan
algoritma rekursi!

Percobaan & Latihan 8.2


Jalankan fungsi dan perintah berikut!

Soal :
a) Berikan tampilan output dan jelaskan perbaris dari program diatas!
b) Baris keberapa yang merupakan kasus dasar (base case) pada program diatas?

Percobaan & Latihan 8.3


Jalankan fungsi dan perintah berikut!

Soal :
a) Berikan tampilan output program diatas!
b) Baris keberapa yang merupakan kasus dasar (base case) pada program diatas?
c) Uji coba 2 nilai input yang berbeda untuk program diatas, berikan tampilan output
dari 2 nilai input tersebut dan analisa hasilnya!

Percobaan & Latihan 8.4


Jalankan kedua program berikut!
Soal :
a) Berikan tampilan output (kedua program) dan jelaskan perbaris untuk program
pertama diatas!
b) Baris keberapa yang merupakan kasus dasar (base case) pada kedua program
diatas?

Percobaan & Latihan 8.5


Jalankan program berikut!

Soal :
Berikan tampilan output dan analisa untuk program diatas!
Baris keberapa yang merupakan kasus dasar (base case) pada program diatas?

Percobaan & Latihan 8.6


Jalankan program Tower of Hanoi berikut!

Soal :
Berikan tampilan output program diatas!
Baris keberapa yang merupakan kasus dasar (base case) pada program diatas?
Uji coba nilai input variabel height 2 dan 4 untuk program diatas, berikan tampilan
output dari 2 nilai input tersebut dan analisa hasilnya!

Laporan Resmi:
1. Buatlah summary dan analisa dari Percobaan & Latihan pada pratikum ini.
2. Berikan kesimpulan dari praktikum ini.
Misalkan Anda ingin menghitung jumlah vektor angka seperti: [1,3,5,7,9]. Fungsi
berulang yang menghitung jumlah. Fungsi ini menggunakan variabel akumulator
(theSum) untuk menghitung jumlah total semua angka dalam vektor dengan mulai
dengan 0 dan menambahkan setiap angka dalam vektor. Fungsi yang menggunakan
rekursi ialah fungsi pertama

Misalkan kita memiliki urutan karakter yang sesuai dengan 10 digit pertama, seperti
convString = "0123456789". Sangat mudah untuk mengkonversi angka kurang dari 10
ke string yang setara dengan mencarinya di urutan. Misalnya, jika angkanya 9, maka
stringnya adalah convString [9] atau "9". Jika kita dapat mengatur untuk memecah
angka 769 menjadi tiga angka satu digit, 7, 6, dan 9, maka mengubahnya menjadi
string adalah sederhana. Base case terdapat pada baris ke 3 dan merupakan base case
percabangan.
Perhatikan bahwa panggilan ke toStr (2 // 2,2) meninggalkan nilai pengembalian "1"
pada stack. Nilai pengembalian ini kemudian digunakan sebagai pengganti
pemanggilan fungsi (toStr (1,2)) dalam ekspresi "1" + convertString [2% 2], yang akan
meninggalkan string "10" di bagian atas tumpukan. Dengan cara ini, tumpukan
panggilan C ++ menggantikan stack yang kami gunakan secara eksplisit di Listing 4.
Dalam contoh penjumlahan daftar kami, Anda dapat memikirkan nilai pengembalian
pada tumpukan yang menggantikan variabel akumulator.
Frame stack juga menyediakan ruang lingkup untuk variabel yang digunakan oleh
fungsi. Meskipun kami memanggil fungsi yang sama berulang-ulang, setiap panggilan
menciptakan ruang lingkup baru untuk variabel yang lokal ke fungsi. Base case
terdapat pada baris baris 5 dan merupakan base case perulangan.

Setelah mengimpor modul turtle akan membuat turtle. Ketika turtle dibuat, ia juga
membuat jendela untuk menarik dirinya sendiri. Selanjutnya dia mendefinisikan fungsi
drawSpiral. Basis kasus untuk fungsi sederhana ini adalah ketika panjang garis yang
ingin kita gambar, seperti yang diberikan oleh parameter len, dikurangi menjadi nol
atau kurang. Jika panjang garis lebih panjang dari nol, kami memerintahkan turtle
untuk maju dengan satuan len dan kemudian berbelok ke kanan 90 derajat. Fungsi ini
menggunakan Langkah rekursif ketika fungsi memanggil drawSpiral lagi dengan
panjang yang dikurangi. Dapat dilihat bahwa fungsi myWin.exitonclick (), ini adalah
metode kecil yang berguna dari jendela yang menempatkan turtle ke dalam mode
tunggu sampai mengklik di dalam jendela, setelah itu program membersihkan dan
keluar. Base case terdapat pada baris ke enam.

S
e
t
i
a
p

t
i
t
i
k

c
a
b
a
n
g

p
a
da pohon berhubungan dengan panggilan rekursif, dan perhatikan bagaimana pohon
ditarik ke kanan sampai ke ranting terpendek. Dan dapat di lihat pada proses jalannya
fungsi. Dan seluruh sisi kanan pohon kiri ditarik sampai kita akhirnya membuat jalan
keluar ke ranting terkecil di sebelah kiri. Base case fungsi kedua pada baris ketiga.
Hal pertama yang dilakukan sierpinski adalah menggambar segitiga luar. Selanjutnya,
ada tiga panggilan rekursif, satu untuk masing-masing segitiga sudut baru yang kita
dapatkan ketika kita menghubungkan titik tengah.
Lihatlah kodenya dan pikirkan urutan di mana segitiga akan ditarik. Sementara urutan
sudut-sudut yang tepat tergantung pada bagaimana set awal ditentukan, dapat di
asumsikan bahwa sudut-sudut itu dipesan di kiri bawah, atas, kanan bawah. Karena
cara fungsi sierpinski menyebut dirinya, sierpinski bekerja dengan cara menuju segitiga
terkecil yang diperbolehkan di sudut kiri bawah, dan kemudian mulai mengisi sisa
segitiga yang bekerja kembali. Kemudian mengisi segitiga di sudut atas dengan bekerja
menuju segitiga terkecil, paling atas. Akhirnya, itu mengisi di sudut kanan bawah,
bekerja dengan cara menuju segitiga terkecil di kanan bawah. Dapat di tunjukkan
bahwa panggilan rekursif selalu dilakukan ke kiri. Fungsi aktif diuraikan dalam warna
hitam, dan panggilan fungsi tidak aktif berwarna abu-abu. Semakin jauh fungsi menuju
bagian bawah, semakin kecil segitiga. Fungsi selesai menggambar satu tingkat pada
satu waktu; setelah selesai dengan bagian kiri bawah bergerak ke tengah bagian bawah,
dan seterusnya.
Di jalur 3 kita memindahkan semua kecuali cakram bawah pada menara awal ke tiang
perantara. Baris berikutnya hanya memindahkan disk bawah ke tempat peristirahatan
terakhir. Kemudian pada baris 5 kita memindahkan menara dari kutub perantara ke atas
disk terbesar. Kasing dasar terdeteksi ketika ketinggian menara adalah 0; dalam hal ini
tidak ada yang bisa dilakukan, jadi fungsi moveTower hanya mengembalikan. Hal
penting yang perlu diingat tentang penanganan base case dengan cara ini adalah bahwa
dengan hanya kembali dari moveTower inilah yang akhirnya memungkinkan fungsi
moveDisk dipanggil. Fungsi moveDisk sangat sederhana Yang dilakukannya hanyalah
mencetak bahwa disk dipindahkan dari satu kutub ke kutub lainnya.

Kesimpulan

Pada pratikum 8 ini saya mengetahui apa itu Rekursi. Rekursi ini adalah sebuah
perulangan di dalam sebuah program.tapi, perulangan yang satu ini sangat berbeda
dengan perulangan pada umumnya.. seperti while dan for. Tapi, fungsinya sama yaitu
perulangan atau looping. Letak perbedaannya adalah dari cara kerjanya... jika for dan
while merupakan sebuah perulangan yang menggunakan sebuah kondisi atau boolean,
maka pada rekursif ini terjadi pada sebuah fungsi atau metode yang memanggil dirinya
sendiri. Dari penjelasan tersebut dapat kita katakan sebagai perulangan yang
memanggil dirinya sendiri untuk melakukan sebuah perulangan.

Anda mungkin juga menyukai