09 pd fungsi rekursif
TRANSCRIPT
![Page 1: 09 pd fungsi rekursif](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/1.jpg)
Fungsi Rekursif (Berulang)
Pemrograman Dasar
![Page 2: 09 pd fungsi rekursif](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/2.jpg)
Definisi
• Recursive = Berulang• Recursive function =
fungsi rekirsif = fungsi yang berulang
• di dalam fungsi tersebut dia memanggil dirinya sendiri
![Page 3: 09 pd fungsi rekursif](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/3.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/6.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/7.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/8.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/9.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/11.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/12.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/13.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/14.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/16.jpg)
• 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](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/17.jpg)
Latihan
• Implementasikan algoritma rekursi untuk fungsi fibonaci dan rekursif!
![Page 18: 09 pd fungsi rekursif](https://reader036.vdocuments.pub/reader036/viewer/2022082503/55812a67d8b42a68488b4900/html5/thumbnails/18.jpg)
Terima Kasih