Wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Quiz Rekursi dan Algoritma C++

Total questions: 15

Worksheet time: 8mins

Name
Class
Date
1.

Apa yang dimaksud dengan rekursi dalam pemrograman?

a)

Proses mengulang perintah menggunakan perulangan for

b)

Fungsi yang memanggil dirinya sendiri

c)

Algoritma yang selalu memilih solusi optimal lokal

d)

Proses membagi masalah menjadi submasalah yang tidak tumpang tindih

2.

Manakah contoh fungsi rekursif untuk menghitung faktorial dalam C++?

a)

```cpp int faktorial(int n) { int hasil = 1; for(int i=1; i<=n; i++) hasil *= i; return hasil; } ```

b)

```cpp int faktorial(int n) { if(n == 0) return 1; else return n * faktorial(n-1); } ```

c)

```cpp int faktorial(int n) { return n + 1; } ```

d)

```cpp int faktorial(int n) { return n * n; } ```

3.

Apa karakteristik utama dari algoritma greedy?

a)

Selalu mencari solusi global terlebih dahulu

b)

Memecah masalah menjadi submasalah yang tumpang tindih

c)

Memilih solusi optimal lokal pada setiap langkah

d)

Menggunakan rekursi untuk menyelesaikan masalah

4.

Manakah contoh masalah yang dapat diselesaikan dengan algoritma greedy?

a)

Mencari nilai faktorial

b)

Mencari jalur terpendek pada graf dengan bobot positif

c)

Menghitung deret Fibonacci

d)

Sorting menggunakan bubble sort

5.

Apa yang membedakan pemrograman dinamis dengan rekursi biasa?

a)

Pemrograman dinamis tidak menggunakan fungsi

b)

Pemrograman dinamis menyimpan hasil submasalah untuk digunakan kembali

c)

Rekursi tidak dapat digunakan untuk masalah besar

d)

Pemrograman dinamis hanya menggunakan perulangan

6.

Manakah contoh kode C++ untuk menghitung deret Fibonacci menggunakan rekursi?

a)

```cpp int fib(int n) { if(n <= 1) return n; return fib(n-1) + fib(n-2); } ```

b)

```cpp int fib(int n) { int a = 0, b = 1, c; for(int i=2; i<=n; i++) { c = a + b; a = b; b = c; } return b; } ```

c)

```cpp int fib(int n) { return n * n; } ```

d)

```cpp int fib(int n) { return n + 1; } ```

7.

Pada algoritma greedy, mengapa solusi yang diambil pada setiap langkah belum tentu optimal secara global?

a)

Karena greedy hanya mempertimbangkan solusi lokal

b)

Karena greedy menggunakan rekursi

c)

Karena greedy menyimpan hasil submasalah

d)

Karena greedy selalu memilih solusi terburuk

8.

Manakah contoh kode C++ yang menerapkan strategi greedy untuk masalah koin minimum?

a)

```cpp int minKoin(int koin[], int n, int jumlah) { int hasil = 0; for(int i = n-1; i >= 0; i--) { while(jumlah >= koin[i]) { jumlah -= koin[i]; hasil++; } } return hasil; } ```

b)

```cpp int minKoin(int koin[], int n, int jumlah) { return jumlah / koin[0]; } ```

c)

```cpp int minKoin(int koin[], int n, int jumlah) { return jumlah * n; } ```

d)

```cpp int minKoin(int koin[], int n, int jumlah) { return 0; } ```

9.

Apa tujuan utama dari pemrograman dinamis?

a)

Mengurangi penggunaan memori

b)

Menghindari perhitungan ulang submasalah yang sama

c)

Mempercepat proses sorting

d)

Mengurangi jumlah baris kode

10.

Manakah contoh kode C++ untuk menghitung deret Fibonacci menggunakan pemrograman dinamis (bottom-up)?

a)

```cpp int fib(int n) { if(n <= 1) return n; int f[n+1]; f[0] = 0; f[1] = 1; for(int i=2; i<=n; i++) f[i] = f[i-1] + f[i-2]; return f[n]; } ```

b)

```cpp int fib(int n) { return n * n; } ```

c)

```cpp int fib(int n) { return n + 1; } ```

d)

```cpp int fib(int n) { return 0; } ```

11.

Apa yang terjadi jika fungsi rekursif tidak memiliki base case?

a)

Fungsi akan berhenti setelah satu kali pemanggilan

b)

Fungsi akan berjalan tanpa henti (infinite recursion)

c)

Fungsi akan menghasilkan hasil yang benar

d)

Fungsi akan mengembalikan nilai 0

12.

Manakah dari berikut ini yang merupakan ciri khas masalah yang cocok diselesaikan dengan pemrograman dinamis?

a)

Masalah dapat dipecah menjadi submasalah yang tumpang tindih

b)

Masalah hanya dapat diselesaikan dengan perulangan

c)

Masalah tidak memiliki solusi optimal

d)

Masalah tidak dapat dipecah menjadi submasalah

13.

Manakah contoh aplikasi rekursi dalam C++ selain faktorial dan Fibonacci?

a)

Mengurutkan array dengan bubble sort

b)

Menelusuri pohon biner (binary tree traversal)

c)

Menghitung rata-rata array

d)

Menampilkan data dengan for loop

14.

Pada masalah Knapsack 0/1, teknik apa yang paling tepat digunakan untuk mendapatkan solusi optimal?

a)

Algoritma Greedy

b)

Pemrograman Dinamis

c)

Rekursi tanpa memoization

d)

Sorting sederhana

15.

Manakah contoh kode C++ untuk menyelesaikan masalah Knapsack 0/1 dengan pemrograman dinamis?

a)

```cpp int knapsack(int W, int wt[], int val[], int n) { int K[n+1][W+1]; for(int i=0; i<=n; i++) { for(int w=0; w<=W; w++) { if(i==0 || w==0) K[i][w] = 0; else if(wt[i-1] <= w) K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]); else K[i][w] = K[i-1][w]; } } return K[n][W]; } ```

b)

```cpp int knapsack(int W, int wt[], int val[], int n) { return W * n; } ```

c)

```cpp int knapsack(int W, int wt[], int val[], int n) { return 0; } ```

d)

```cpp int knapsack(int W, int wt[], int val[], int n) { return W + n; } ```