20
PEMROGRAMAN DASAR Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya Fungsi Rekursif Dr. Eng. Herman Tolle, ST., MT Sistem Informasi PTIIK UB Semester Ganjil 2014/2015

Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

  • Upload
    vutruc

  • View
    411

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

PEMROGRAMAN DASAR

Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya

Fungsi Rekursif

Dr. Eng. Herman Tolle, ST., MT

Sistem Informasi PTIIK UBSemester Ganjil 2014/2015

Page 2: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

FUNGSI REKURSIF

“Fungsi yang memanggil dirinya sendiri”

Page 3: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

REKURSIF

• Rekursif merupakan salah satu metode dalam dunia matematika dimana definisi sebuah fungsi mengandung fungsi itu sendiri.

• Dalam dunia pemrograman, rekursif diimplementasikan dalam sebuah fungsi yang memanggil dirinya sendiri dan tergolong dalam dynamic programming.

Page 4: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

FUNGSI REKURSIF

• Metoda rekursif adalah metoda yang memanggil dirinya sendiri.

• Digunakan pada fungsi yang dapat dieksekusi secara iteratif (berulang)

• Metoda ini memanggil dirinya sendiri sehingga dapat melakukan proses berulang-ulang.

• Kasus sederhana yang sering muncul adalah proses berulang-ulang menghitung hasil faktorial.

• 0! = 1;n! = n × (n – 1)!, n> 0!

Page 5: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

• Faktorial dari 5 adalah 1 x 2 x 3 x 4 x 5.

• Dari proses itu kita ketahui bahwa untuk menghitung factorial 5 manualnya seperti 1 x 2 = 2, lalu hasil 2 ini dikalikan 3 sehingga hasilnya adalah 6, lalu hasil 6 ini dikalikan lagi dengan 4 sehingga hasilnya adalah 36, lalu hasil 36 ini dikalikan dengan 5 sehingga hasilnya adalah 120.

• 0! = 1;

n! = n × (n – 1)!, n> 0!

Page 6: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Contoh

class faktorialDemo{

public static void main(String args[]){

System.out.println("Hitung Faktorial dengan

Rekursif");

System.out.println("Faktorial dari 4 adalah : "+

fak_rekursif(4));

System.out.println("Hitung Faktorial dengan

Perulangan");

System.out.println("Faktorial dari 4 adalah : "+

fak_perulangan(4));

}

}

Page 7: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

private static int fak_perulangan(int n)

{

int t;

int Hasil;

Hasil = 1;

for(t=1; t<=n; t++)

Hasil *= t;

return Hasil;

}

private static int fak_rekursif(int n)

{

int Hasil;

if(n==1 || n==0) return 1;

Hasil = fak_rekursif(n-1) * n;

return Hasil;

}

Page 8: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah
Page 9: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Case: Deret Fibonaci

Deret : 0 1 1 2 3 5 8 13 21 34 55 89

...

indeks: 0 1 2 3 4 5 6 7 8 9 10 11

• Deret Fibonacci dimulai dengan 0 dan 1, dan hasil penjumlahan dua nilai deret sebelumnya menjadi nilai indeks yang berikut.

• Deret ini dapat didefinisikan rekursif sebagai berikut:

fib(0) = 0;

fib(1) = 1;

fib(index) = fib(index-2) + fib(index-1); utk index >= 2

Page 10: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah
Page 11: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah
Page 12: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Latihan

• Buat algoritma dan kode program fungsi rekursif untuk perhitungan x pangkat y

• Contoh:

– Input : x,y

– Proses: x^y = 1, jika y = 0

– x^y = x * x^(y-1), jika y > 0

Page 13: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

class Pangkat {public static int pangkatRekursif(int x, int y) {

if (y == 0) {return 1;

}else {

return x * pangkatRekursif(x, y - 1);}

}

public static void main(String[] args) {

int A = pangkatRekursif(10,3)System.out.println("10 dipangkatkan 3 = “ + A);

}}

Page 14: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Contoh Penerapan Fungsi Rekursif

• Faktorial

• Fraktal

• Tree

• Faktor Persekutuan Terbesar (Greatest Common Divisor (GCD))

• Algoritma Rekursif Best First Searching (RBFS)

Page 15: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Fraktal, Tree

Page 16: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Greatest Common Divisor (GCD)

• FPB (Faktor Persekutuan Terbesar) dalam bahasa inggris dinamakan Greatest Common Divisor (GCD).

• FPB dari dua bilangan adalah bilangan bulat positif terbesar yang membagi habis kedua bilangan. Bilangan yang dibandingkan tersebut berupa bilangan bulat atau integer.

• Dalam definisi tersebut yaitu membagi habis kedua bilangan bulat positif, berarti harus dihitung modulo-nya (sisa hasil bagi dari kedua bilangan).

Page 17: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

• FPB x dan y memiliki pola sebagai berikut:

• Jika x dibagi y sama dengan 0, maka FPB dari x dan y adalah y

• Jika x dibagi y tidak sama dengan 0, maka y dibagi dengan sisa pembagian x dan y

• Formulanya adalah:

• x % y = 0, FPB x dan y adalah y

• x % y != 0 , maka y dibagi dengan hasil dari (x % y)

Page 18: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Fungsi GCD non rekursif

/** Memberikan nilai balik gcd atas input dua integer */

public static int gcd(int n1, int n2) {

int gcd = 1; // gcd awal = 1

int k = 2; // gcd yang mungkin

while (k <= n1 && k <= n2) {

if (n1 % k == 0 && n2 % k == 0)

gcd = k; // Perbarui gcd

k++;

}

return gcd; // Memberikan nilai balik gcd

}

Page 19: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Fungsi Rekursif GCD

public class Euclid

{

// implementasi recursive

public static int gcd(int x, int y) {

if (y == 0) return x;

else return gcd(y, x % y);

}

public static void main(String[] args)

{

int p = Integer.parseInt(args[0]); // baca input argumen 0

int q = Integer.parseInt(args[1]); // baca input argumen 1

int d = gcd(p, q);

System.out.println("gcd(" + p + ", " + q + ") = " + d);

}

}

Page 20: Fungsi Rekursif - adamhendrabrata.files.wordpress.com · •Deret Fibonacci dimulai dengan 0 dan 1, ... •Buat algoritma dan kode program fungsi ... •FPB dari dua bilangan adalah

Pemanggilan:C:\Code>javac Euclid 1440 408

Hasil eksekusi: gcd(1440, 408) = 24

Proses dlm program:

gcd(1440, 408)

gcd(408, 216)

gcd(216, 192)

gcd(192, 24)

gcd(24, 0)

return 24

return 24

return 24

return 24

return 24