Anda di halaman 1dari 5

LAPORAN PRAKTIKUM

ALGORITMA DAN STRUKTUR DATA


2. Buatlah program secara rekursif, masukkan jumlah N karakter dan cetak dalam semua
kombinasi!

Listing Program
import java.util.Scanner;
public class Nomor2 {
public static void Kombinasi(String x, int b, int c) {
if (b == 0) {
System.out.print(x + " ");
} else {
for (int i = 97; i < 97 + c; i++) {
Kombinasi(x + (char) i, b - 1, c);
}
}
}

public static void main(String[] args) {


Scanner input = new Scanner(System.in);
System.out.print("Masukkan jumlah karakter : ");
int mix = input.nextInt();
Kombinasi("", mix, mix);
}
}

Output Program

Penjelasan Program
Program ini mempunyai sebuah fungsi rekursif dengan beberapa parameter.
Parameter pertama (x) adalah sebuah string kosong yang nantinya akan diisi dengan
karakter yang akan dicetak. Parameter kedua (b) dan ketiga (c) adalah sebuah integer
yang mana nilai awalnya sesuai dengan jumlah karakter yang ingin ditampilkan
kombinasinya.
Ketika fungsi rekursif berjalan, yang pertama dilakukan adalah melakukan
pengecekan terhadap b, apabila b = 0 maka akan mencetak nilai string di dalam x.
Namun apabila b != 0 maka akan dilakukan perulangan dengan i = 97 yang mana
apabila dikonversi menjadi sebuah char menurut bilangan ASCII 97 = “a”. Perulangan
akan terus dilakukan hingga i = 97+c, yang mana b dan c adalah bilangan yang
diinputkan oleh user. Nilai i ini yang akan selalu diambil sebagai nilai x yang akan
dikonversi terlebih dahulu menjadi char. Dan apabila sudah mencapai b = 0, maka
string x akan dicetak.

4. Buatlah program rekursif untuk memecahkan permasalahan Menara Hanoi!


Program ini merupakan program untuk menampilkan pergerakkan menara hanoi, yang
merujuk pada class menaraHanoi. Secara umum algoritma menara hanoi, adalah
memindahkan sub menara hanoi dengan n – 1 pin dari n pin ke tiang perantara. Lalu
memindahkan pin ke n ke tiang tujuan, lalu memindahkan sub menara hanoi dengan n
– 1 pin yang ada di tiang perantara, ke tiang tujuan. StopCase nya jika n == 1.

Listing Program
class TowersOfHanoi {
private int totalDisks;

public TowersOfHanoi(int totalDisks) {


this.totalDisks = totalDisks;
}

public void solve() {


moveTower(totalDisks, 1, 3, 2);
}

public void moveTower(int numDisks, int start, int end, int temp) {
if (numDisks == 1) {
moveOneDisk(start, end);
} else {
moveTower(numDisks - 1, start, temp, end);
moveOneDisk(start, end);
moveTower(numDisks - 1, temp, end, start);
}
}

public void moveOneDisk(int start, int end) {


System.out.println("Pindahkan disk dari " + start + " ke " + end);
}
}

public class SolveTowers {


public static void main(String[] args) {
TowersOfHanoi towers = new TowersOfHanoi(4);
towers.solve();
}
}

Output Program

Penjelasan Program
Program ini memiliki fungsi rekursif yang mempunyai beberapa parameter, yaitu
jumlah disk, tower start, tower temp, dan tower end. Ketika pertama dijalankan maka
akan memindahkan jumlah disk – 1 dari tiang asal ke tiang bantuan, lalu
memindahkan disk terbesar dari tiang asal ke tiang tujuan, dan terakhir memindahkan
jumlah disk – 1 dari tiang bantuan ke tiang tujuan. Fungsi tersebut terus berjalan
sampai disk terakhir dipindahkan ke tiang tujuan.

8. Jelaskan proses rekursif untuk program dibawah ini!


public static boolean binarySearch(int[] x, int start, int end, int n) {
if (end < start) {
return false;
}
int mid = (start + end) / 2;
if (x[mid] == n) {
return true;
} else {
if (x[mid] < n) {
return binarySearch(x, mid + 1, end, n);
} else {
return binarySearch(x, start, mid - 1, n);
}
}

Penjelasan Program
Program ini mempunyai sebuah fungsi rekursif untuk mencari bilangan yang terdapat
dalam sebuah array. Fungsi tersebut mempunyai beberapa parameter yaitu sebuah
array, int start, int end, dan int n. Ketika program dijalankan maka akan dilakukan
pengecekan apakah end lebih kecil dari start, jika iya maka akan direturn nilai false.
Jika tidak, akan dihitung nilai mid yang didapatkan dari start + end / 2. Dimana nilai
mid ini akan dijadikan patokan pertama untuk mencari bilangan. Apabila nilai dalam
array x index mid sama dengan bilangan yang kita cari, maka akan direturn nilai true.
Jika nilai mid lebih kecil maka nilai mid akan ditambah 1, jika nilai mid lebih besar
maka nilai mid akan dikurang 1.

Anda mungkin juga menyukai