Tutorial Membuat Program Deret Fibonacci pada Java
Deret Fibonacci adalah salah satu konsep matematika yang populer di dunia pemrograman. Deret ini dimulai dengan dua angka pertama, yaitu 0
dan 1
, di mana setiap angka berikutnya adalah hasil penjumlahan dua angka sebelumnya. Contoh deret Fibonacci:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
Pada artikel ini, kita akan mempelajari cara membuat program untuk menghitung deret Fibonacci menggunakan bahasa pemrograman Java. Program ini akan mencakup dua metode:
- Menggunakan perulangan (iterasi).
- Menggunakan rekursi.
1. Menggunakan Perulangan (Iterasi)
Metode ini menggunakan perulangan untuk menghitung deret Fibonacci hingga jumlah angka tertentu.
Kode Program
import java.util.Scanner;
public class FibonacciIterasi {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Meminta jumlah angka Fibonacci dari pengguna
System.out.print("Masukkan jumlah angka Fibonacci yang ingin ditampilkan: ");
int n = scanner.nextInt();
// Variabel untuk menghitung deret Fibonacci
int a = 0, b = 1;
System.out.println("Deret Fibonacci: ");
for (int i = 0; i < n; i++) {
System.out.print(a + " "); // Menampilkan angka Fibonacci
int next = a + b; // Menghitung angka berikutnya
a = b; // Memindahkan nilai b ke a
b = next; // Memindahkan nilai next ke b
}
scanner.close();
}
}
Penjelasan
- Input Pengguna: Program meminta pengguna untuk memasukkan jumlah angka Fibonacci yang ingin ditampilkan.
- Logika Perulangan:
- Variabel
a
danb
masing-masing menyimpan dua angka pertama dalam deret. - Angka berikutnya dihitung dengan menjumlahkan
a
danb
. - Nilai
a
danb
diperbarui dalam setiap iterasi.
- Variabel
Contoh Output
Input:
Masukkan jumlah angka Fibonacci yang ingin ditampilkan: 10
Output:
Deret Fibonacci:
0 1 1 2 3 5 8 13 21 34
2. Menggunakan Rekursi
Metode ini menggunakan fungsi rekursif untuk menghitung angka dalam deret Fibonacci.
Kode Program
import java.util.Scanner;
public class FibonacciRekursi {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Meminta jumlah angka Fibonacci dari pengguna
System.out.print("Masukkan jumlah angka Fibonacci yang ingin ditampilkan: ");
int n = scanner.nextInt();
System.out.println("Deret Fibonacci: ");
for (int i = 0; i < n; i++) {
System.out.print(fibonacci(i) + " "); // Memanggil fungsi rekursif
}
scanner.close();
}
// Fungsi rekursif untuk menghitung angka Fibonacci
public static int fibonacci(int n) {
if (n == 0) {
return 0; // Base case untuk angka pertama
} else if (n == 1) {
return 1; // Base case untuk angka kedua
} else {
return fibonacci(n - 1) + fibonacci(n - 2); // Rekursi
}
}
}
Penjelasan
- Fungsi Rekursif:
- Fungsi
fibonacci()
memanggil dirinya sendiri untuk menghitung angka Fibonacci. - Base case untuk
n == 0
dann == 1
mengembalikan angka langsung. - Rekursi digunakan untuk menghitung angka Fibonacci lainnya.
- Fungsi
- Penggunaan:
- Program mencetak angka Fibonacci dengan memanggil fungsi
fibonacci(i)
untuk setiap nilaii
dari0
hinggan
.
- Program mencetak angka Fibonacci dengan memanggil fungsi
Contoh Output
Input:
Masukkan jumlah angka Fibonacci yang ingin ditampilkan: 10
Output:
Deret Fibonacci:
0 1 1 2 3 5 8 13 21 34
3. Perbandingan Iterasi dan Rekursi
Aspek | Iterasi | Rekursi |
---|---|---|
Kinerja | Lebih cepat karena tidak membutuhkan banyak tumpukan memori. | Lebih lambat untuk input besar karena memerlukan banyak pemanggilan fungsi. |
Keterbacaan | Mudah dipahami dan lebih sederhana. | Lebih elegan, tetapi lebih sulit dipahami untuk pemula. |
Penggunaan Memori | Efisien karena tidak membuat tumpukan fungsi. | Membutuhkan lebih banyak memori karena menggunakan rekursi. |
4. Menggunakan Memoisasi untuk Rekursi yang Efisien
Salah satu kelemahan metode rekursi adalah kinerjanya yang lambat, terutama untuk nilai n
yang besar. Untuk mengatasinya, kita bisa menggunakan memoisasi, yaitu teknik menyimpan hasil perhitungan sebelumnya sehingga tidak perlu dihitung ulang.
Kode Program dengan Memoisasi
import java.util.Scanner;
public class FibonacciMemoisasi {
private static int[] memo; // Array untuk menyimpan hasil perhitungan
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Meminta jumlah angka Fibonacci dari pengguna
System.out.print("Masukkan jumlah angka Fibonacci yang ingin ditampilkan: ");
int n = scanner.nextInt();
// Inisialisasi array memo
memo = new int[n];
System.out.println("Deret Fibonacci: ");
for (int i = 0; i < n; i++) {
System.out.print(fibonacci(i) + " ");
}
scanner.close();
}
// Fungsi rekursif dengan memoisasi
public static int fibonacci(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
}
// Cek apakah nilai sudah dihitung sebelumnya
if (memo[n] != 0) {
return memo[n];
}
// Simpan hasil perhitungan dalam memo
memo[n] = fibonacci(n - 1) + fibonacci(n - 2);
return memo[n];
}
}
Keuntungan Memoisasi
- Mengurangi jumlah perhitungan yang berulang.
- Mempercepat proses untuk input besar.
Kesimpulan
Deret Fibonacci adalah latihan yang bagus untuk memahami logika dasar pemrograman, baik menggunakan iterasi maupun rekursi. Metode iterasi lebih cepat dan efisien untuk input besar, sedangkan metode rekursi dengan memoisasi memberikan solusi yang lebih elegan dan optimal.