WorksheetsQuiz Rekursi dan Algoritma C++
Total questions: 15
Worksheet time: 8mins
Apa yang dimaksud dengan rekursi dalam pemrograman?
Proses mengulang perintah menggunakan perulangan for
Fungsi yang memanggil dirinya sendiri
Algoritma yang selalu memilih solusi optimal lokal
Proses membagi masalah menjadi submasalah yang tidak tumpang tindih
Manakah contoh fungsi rekursif untuk menghitung faktorial dalam C++?
```cpp int faktorial(int n) { int hasil = 1; for(int i=1; i<=n; i++) hasil *= i; return hasil; } ```
```cpp int faktorial(int n) { if(n == 0) return 1; else return n * faktorial(n-1); } ```
```cpp int faktorial(int n) { return n + 1; } ```
```cpp int faktorial(int n) { return n * n; } ```
Apa karakteristik utama dari algoritma greedy?
Selalu mencari solusi global terlebih dahulu
Memecah masalah menjadi submasalah yang tumpang tindih
Memilih solusi optimal lokal pada setiap langkah
Menggunakan rekursi untuk menyelesaikan masalah
Manakah contoh masalah yang dapat diselesaikan dengan algoritma greedy?
Mencari nilai faktorial
Mencari jalur terpendek pada graf dengan bobot positif
Menghitung deret Fibonacci
Sorting menggunakan bubble sort
Apa yang membedakan pemrograman dinamis dengan rekursi biasa?
Pemrograman dinamis tidak menggunakan fungsi
Pemrograman dinamis menyimpan hasil submasalah untuk digunakan kembali
Rekursi tidak dapat digunakan untuk masalah besar
Pemrograman dinamis hanya menggunakan perulangan
Manakah contoh kode C++ untuk menghitung deret Fibonacci menggunakan rekursi?
```cpp int fib(int n) { if(n <= 1) return n; return fib(n-1) + fib(n-2); } ```
```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; } ```
```cpp int fib(int n) { return n * n; } ```
```cpp int fib(int n) { return n + 1; } ```
Pada algoritma greedy, mengapa solusi yang diambil pada setiap langkah belum tentu optimal secara global?
Karena greedy hanya mempertimbangkan solusi lokal
Karena greedy menggunakan rekursi
Karena greedy menyimpan hasil submasalah
Karena greedy selalu memilih solusi terburuk
Manakah contoh kode C++ yang menerapkan strategi greedy untuk masalah koin minimum?
```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; } ```
```cpp int minKoin(int koin[], int n, int jumlah) { return jumlah / koin[0]; } ```
```cpp int minKoin(int koin[], int n, int jumlah) { return jumlah * n; } ```
```cpp int minKoin(int koin[], int n, int jumlah) { return 0; } ```
Apa tujuan utama dari pemrograman dinamis?
Mengurangi penggunaan memori
Menghindari perhitungan ulang submasalah yang sama
Mempercepat proses sorting
Mengurangi jumlah baris kode
Manakah contoh kode C++ untuk menghitung deret Fibonacci menggunakan pemrograman dinamis (bottom-up)?
```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]; } ```
```cpp int fib(int n) { return n * n; } ```
```cpp int fib(int n) { return n + 1; } ```
```cpp int fib(int n) { return 0; } ```
Apa yang terjadi jika fungsi rekursif tidak memiliki base case?
Fungsi akan berhenti setelah satu kali pemanggilan
Fungsi akan berjalan tanpa henti (infinite recursion)
Fungsi akan menghasilkan hasil yang benar
Fungsi akan mengembalikan nilai 0
Manakah dari berikut ini yang merupakan ciri khas masalah yang cocok diselesaikan dengan pemrograman dinamis?
Masalah dapat dipecah menjadi submasalah yang tumpang tindih
Masalah hanya dapat diselesaikan dengan perulangan
Masalah tidak memiliki solusi optimal
Masalah tidak dapat dipecah menjadi submasalah
Manakah contoh aplikasi rekursi dalam C++ selain faktorial dan Fibonacci?
Mengurutkan array dengan bubble sort
Menelusuri pohon biner (binary tree traversal)
Menghitung rata-rata array
Menampilkan data dengan for loop
Pada masalah Knapsack 0/1, teknik apa yang paling tepat digunakan untuk mendapatkan solusi optimal?
Algoritma Greedy
Pemrograman Dinamis
Rekursi tanpa memoization
Sorting sederhana
Manakah contoh kode C++ untuk menyelesaikan masalah Knapsack 0/1 dengan pemrograman dinamis?
```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]; } ```
```cpp int knapsack(int W, int wt[], int val[], int n) { return W * n; } ```
```cpp int knapsack(int W, int wt[], int val[], int n) { return 0; } ```
```cpp int knapsack(int W, int wt[], int val[], int n) { return W + n; } ```
