Kamis, 21 April 2011

FIBONACI

Program fibonaci dengan jeliot.


import jeliot.io.*;

/* IterFibonacci calculates the first */
/* n fibonacci numbers. N is supplied */
/* by the user.                          */

class IterFibonacci {
    static void main() {

        int a = 1;
        int b = 0;
        int tmp;
        int i = 0;
        int n = Input.readInt();
      
        while (i < n) {
            tmp = a;
            a = a + b;
            b = tmp;
            i = i + 1;
            Output.println(a);
        }
    }
}






Pada algoritma fibonacci rekursif dan fibonacci non-rekursif, kita tahu bagaimana merumuskan deret bilangan fibonacci dengan algoritma logika yang kita miliki. Sekarang akan dibahas pnerapan algoritma tersebut ke dalam programming java. Pertama mari kita lihat source code java untuk deret bilangan fibonnaci rekursif. Source codenya seperti di bawah ini :
01/**
02 *
03 * @author Goes Redy
04 */
05public class Fibonacci {
06    public static int fibbon(int x){
07        if (x<=0 || x<=1){
08            return x;
09        }
10        else{
11            return fibbon(x-2)+fibbon(x-1);
12        }
13    }
14    public static void main(String[]args){
15        int n=10;
16        for (int i=0;i<n;i++){
17            System.out.print(fibbon(i)+" ");
18        }
19    }
20}
Code di atas mengeluarkan nilai dari setiap alamatnya pada array. Jika for pada code java di atas dihilangkan, maka kita akan mendapatkan satu nilai saja dari setiap alamat yang kita ketikkan pada pemanggilan rekursifnya. Jadi for tersebut diperlukan agar bilangan fibonacci tersebut dikeluarkan dari bilangan pertama sampai ke deret yang kita inginkan secara berurutan.
Kedua, mari kita bahas untuk algoritma yang non-rekursif. Cara ini relatif lebih baik, karena penggunaan memorynya jauh sekali lebih hemat untuk penggunaan data yang banyak. Sedikit memory tentunya jauh lebih cepat. Contoh sourcodenya adalah seperti di bawah ini :
01/**
02 *
03 * @author Goes Redy
04 */
05public class Fibonacci {
06    public static void main(String[]args){
07    int a=0,b=1;
08    int n = 10// input deret fibonacci
09    for (int i=1;i<=n;i++){
10      System.out.print(a+" ");
11      a=a+b;
12      b=a-b;
13    }
14  }
15}
Bisa langsung dilihat pada sourcecode tersebut hampir sama dengan algoritmanya. Algoritmanya bisa dibilang sangat efektif karena menghabiskan source sesuai kebutuhannya, jadi bisa dibilang efesien bukan.






Barisan Fibonacci adalah barisan yang didifinisikan secara rekursif. Barisan fibonacci yang bertama adalah :
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946…
sumber : Bilangan Fibonacci 
jadi algoritmanya adalah bilangan di awali dari 0 dan 1 dan bilangan selanjutnya merupakan penambahan bilangan sebelumnya dengan yang sebelumnya lagi.
dan dibawah ini saya mencoba membuat sourcode dari algoritma fibonacci menggunakan java programming.
Program :
import javax.swing.JOptionPane;

public class Fibonacci {
    public static void main(String[] args) {
        int deret=Integer.parseInt(JOptionPane.showInputDialog("Masukkan berapa deret Fibonacci: "));
        int a=0;
        int b=1;
        System.out.print(deret+" deret Fibonacci: " );
        for (int i=0;i<deret;i++){
            System.out.print(a+" ");
            a=a+b;
            b=a-b;
        }
    }
}
sourcecode diatas kalo di run hasilnya seperti dibawah ini, contoh saya tampilkan 9 deret bilangan fibonacci.
fibo
sourcecode diatas masih bisa dikembangkan lagi, yaitu variable a dan b menggunakan inputan/masukan dari keyboard karena fibonacci tidak hanya untuk angka 0 dan 1 saja, tapi untuk yg lain juga bisa.. misal 3 dan 7, dsb…


Program :
public class Fibonacci {
public static void main (String [] args) {
int x = Integer.parseInt(args[0]);
int i, temp01, temp02, hasil;
temp01=0;
temp02=1;
hasil=0;
for(i=1; i<=x; i++){
temp01=temp02;
temp02=hasil;
System.out.print(hasil+" ");
hasil=temp01+temp02;
}
}
}



Penjelasan : Pada contoh gambar di atas saya memasukan inputan 10,sehingga akan melakukan perulangan sebanyak 10 kali. Saat perulangan pertama dilakukan, nilai temp02 akan dimasukan ke temp01 dan nilai variable hasil akan dimasukan ke temp02. Pada saat perulangan pertama dilakukan  nilai variable hasil masih bernilai nol lalu di outputkan ke layar, setelah itu nilai temp01 akan dijumlahkan dengan nilai temp02 dan akan dimasukan ke dalam variabel hasil. Proses tersebut akan terus dilakukan sampai proses perulangan selesai.





Tidak ada komentar:

Posting Komentar