Tutorial Membuat Program Deret Fibonacci pada Java

Tutorial Membuat Program Deret Fibonacci pada Java
Photo by Scott Graham / Unsplash

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:

  1. Menggunakan perulangan (iterasi).
  2. 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 dan b masing-masing menyimpan dua angka pertama dalam deret.
    • Angka berikutnya dihitung dengan menjumlahkan a dan b.
    • Nilai a dan b diperbarui dalam setiap iterasi.

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 dan n == 1 mengembalikan angka langsung.
    • Rekursi digunakan untuk menghitung angka Fibonacci lainnya.
  • Penggunaan:
    • Program mencetak angka Fibonacci dengan memanggil fungsi fibonacci(i) untuk setiap nilai i dari 0 hingga n.

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.

Read more