09 pd fungsi rekursif

18
Fungsi Rekursif (Berulang) Pemrograman Dasar

Upload: sofi-orient

Post on 17-Jun-2015

965 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: 09 pd fungsi rekursif

Fungsi Rekursif (Berulang)

Pemrograman Dasar

Page 2: 09 pd fungsi rekursif

Definisi

• Recursive = Berulang• Recursive function =

fungsi rekirsif = fungsi yang berulang

• di dalam fungsi tersebut dia memanggil dirinya sendiri

Page 3: 09 pd fungsi rekursif

• Fungsi rekursif: Di dalamnya terdapat pernyataan yang memanggil dirinya sendiri.

• Berguna untuk memecahkan masalah yang dapat didefinisikan secara rekursif pula.

• n faktorial atau n! = n * n-1 * n-2 * …. * 3 * 2 * 1, dan didefiniskan bahwa 0! = 1

• Contoh: 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 4! = 4 * 3! n! = n * (n-1)!

3

Fungsi Rekursif

Page 4: 09 pd fungsi rekursif

Faktorial (n) atau n! didefinisikan sebagai berikut :jika n = 0, n! = 1jika n > 0, n! = n * (n-1)!

4! = 4 * 3!3! = 3 * 2!2! = 2 * 1!1! = 1* 0!0! = 1

Jadi: 4! = 4*3*2*1= 24

Page 5: 09 pd fungsi rekursif

4! = 4*3! = 4*3*2! = 4*3*2*1! = 4*3*2*1 = 24// iteratif dekremental

long faktorialIteratifDec(long n)

mulai

long i, faktorial = 1;

for(i=n; i>=1; i--)

faktorial *= i;

return faktorial;

selesai

tutup

4! = 1*2*3*4 = 24// iteratif inkremental

long faktorialIteratifInc(long n){

mulai

long i, faktorial = 1;

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

faktorial *= i;

return faktorial;

selesai

tutup

5

Fungsi Iteratif

Page 6: 09 pd fungsi rekursif

• Contoh perhitungan 5 faktorial

6

5!(5 * 4!)(5 * (4 *3!))(5 * (4 * (3 * 2!)))(5 * (4 * (3 * (2 * 1!))))(5 * (4 * (3 * (2 * (1 * 0!)))))(5 * (4 * (3 * (2 * (1 * 1)))))(5 * (4 * (3 * (2 * 1))))(5 * (4 * (3 * 2)))(5 * (4 * 6 ))(5 * 24)120

Fungsi Rekursif

Page 7: 09 pd fungsi rekursif

• Fungsi rekursif mempunyai dua komponen yaitu:– Base case:

Mengembalikan nilai tanpa melakukan pemanggilan rekursi berikutnya.

Rekursi berakhir jika base case dijumpai/dipenuhi

– Recursion call / Reduction step:

Memanggil fungsi rekursif di dalam fungsi rekursif di atas

Menghubungkan sebuah fungsi rekursif dengan fungsi rekursif di dalamnya

Biasanya memiliki keyword return untuk mengembalikan nilai ke fungsi yang memanggilnya

7

Fungsi Rekursif

Page 8: 09 pd fungsi rekursif

• Fungsi faktorial– Base case: n = 0– Reduction step: f(n) = n * f(n-1)

// rekursiflong faktorialRekursif(long n) mulai

if(n==0) return (1); else return(n * faktorialRekursif(n-1)); selesaitutup

8

Fungsi Rekursif

Page 9: 09 pd fungsi rekursif

• Contoh:

9

• Faktorial - Rekursif

long faktorial(long n) mulai if(n==0) return (1); else return(n*faktorial(n-1)); selesaitutup

• Faktorial - Iteratif // dekrementallong faktorial(long n) mulai

long i, faktorial = 1; for(i=n; i>=1; i--) faktorial *= i; return faktorial; selesaitutup

Rekursif vs Iteratif

Page 10: 09 pd fungsi rekursif

10

RekursifPengulangan dengan struktur seleksi (if-

else) dan pemanggilan fungsi (dirinya sendiri) -> rekursi

Pengulangan berhenti saat base case dijumpai/dipenuhi (konvergen terhadap base case)

Pengulangan tanpa henti jika base case tidak pernah dijumpai/dipenuhi (tidak konvergen terhadap base case)

Biaya proses lebih tinggi dengan pemanggilan banyak fungsi (butuh memori lebih besar & kerja prosesor lebih tinggi)

Terbaca lebih jelas, model lebih dekat dengan masalah (contoh: faktorial, fibonacci)

IteratifPengulangan dengan struktur repetisi

(for/while) Pengulangan berhenti saat kondisi

pengulangan bernilai salah (false)Pengulangan tanpa henti jika kondisi

pengulangan selalu benar Biaya proses lebih rendah (kebutuhan

memori lebih kecil & kerja prosesor lebih rendah) karena proses pengulangan berada dalam satu fungsi

Terbaca kurang jelas, model kurang dekat dengan masalah (contoh: faktorial, fibonacci)

Rekursif vs Iteratif

Page 11: 09 pd fungsi rekursif

• Meskipun penulisan program dengan cara rekursif bisa lebih jelas dan pendek, namun fungsi rekursif memerlukan :

– Memori yang lebih banyak untuk mengaktifkan stack (memori yang digunakan untuk pemanggilan fungsi).

– Waktu lebih lama untuk menjejaki setiap rekursi melalui stack.

11

Apakah stack ?

Kekurangan Rekursi

Page 12: 09 pd fungsi rekursif

• Secara umum, hanya jika :– Penyelesaian sulit dilaksanakan secara iteratif

– Efisiensi dengan cara rekursif masih memadai

– Efisiensi bukan masalah dibandingkan dengan kejelasan logika program

– Tidak mempertimbangkan faktor penghematan memori dan kecepatan eksekusi program

Kecepatan kerja dan penghematan memori (iteratif)

VS

Perancangan logika yang baik (rekursif)

12

Kapan Rekursi?

Page 13: 09 pd fungsi rekursif

• Urutan bilangan 0, 1, 1, 2, 3, 5, 8, 13 … disebut bilangan Fibonacci.

• Hubungan antara satu angka dengan angka berikutnya didefinisikan secara rekursif sebagai berikut :– Fib(n) = n, jika n = 0 atau 1

– Fib(n) = Fib(n-2) + Fib(n-1) , jika n >= 2

13

Bilangan Fibonacci

Page 14: 09 pd fungsi rekursif

• Misalkan jika ditanya berapa suku ke-4 dari barisan fibonachi?

• n = 4fibo(4) = = fibo(3) + fibo(2)= (fibo(2) + fibo(1)) + (fibo(1) + fibo(0))= ((fibo(1) + fibo(0)) + 1) + (1 + 0)= ((1 + 0) + 1) + 1= (1 + 1) + 1= 2 + 1= 3

Page 15: 09 pd fungsi rekursif

15

int Fib(int n) mulai int f; if(n==0)

f = 0; else if(n==1)

f = 1; else

f = Fib(n-2) + Fib(n-1); return f; selesaitutup

Fungsi fib() di atas ditulis secara rekursif dan disebut sebagai slow_Fib()

Tulislah fast_Fib() jika menggunakan iterasi.

Fungsi fib() di atas ditulis secara rekursif dan disebut sebagai slow_Fib()

Tulislah fast_Fib() jika menggunakan iterasi.

Bilangan Fibonacci

Page 16: 09 pd fungsi rekursif

• Contoh : Skema fibonacci jika N=4

16

FIB (4)

FIB (3) FIB (2)

FIB (2) FIB (1) FIB (1) FIB (0)

FIB (1) FIB (0)

Bilangan Fibonacci

+

+ +

+

Page 17: 09 pd fungsi rekursif

Latihan

• Implementasikan algoritma rekursi untuk fungsi fibonaci dan rekursif!

Page 18: 09 pd fungsi rekursif

Terima Kasih