Rekursif Rizki Muliono,M.Kom.

Slides:



Advertisements
Presentasi serupa
REKURSIF.
Advertisements

Pemrograman Berorientasi Objek (Project)
Definisi Rekursif Ada kalanya kita mengalami kesulitan untuk mendefinisikan suatu obyek secara eksplisit. Mungkin lebih mudah untuk mendefinisikan obyek.
Algoritma dan Struktur Data
REKURSIF.
MATERI 9 FUNGSI REKURSIF.
1 Ruli Manurung & Ade AzuratFasilkom UI - IKI /2008 – Ganjil – Minggu 4 Dasar-dasar Rekursif.
Rekursif Yuliana Setiowati.
Pertemuan-4 : Recurrences
Desain dan Analisis Algoritma
Pertemuan 2 INDUKSI MATEMATIKA & FUNGSI REKURSIF
REKURSIF Matakuliah : T0974 / Algoritma dan Metode Object Oriented Programming I Tahun : 2008 Versi : 1/0.
Pemrograman Terstruktur
Subprogram Minggu V – VI
Fungsi Rekursif.
Fungsi Rekursif Dasar Pemrograman.
sebuah fungsi yang memanggil dirinya sendiri
PART 7 TEKNIK REKURSIF DOSEN : AHMAD APANDI, ST.
Sumber Kepustakaan : indryz.lecture.ub.ac.id/.../analisa-efisiensi- algoritm... 1  Fungsi yang memanggil dirinya sendiri  Sebuah fungsi f juga merupakan.
LOGIKA DAN ALGORITMA - PERTEMUAN 8 - REKURSI.
Definisi Rekursif Ada kalanya kita mengalami kesulitan untuk mendefinisikan suatu obyek secara eksplisit. Mungkin lebih mudah untuk mendefinisikan obyek.
STRUKTUR DATA recursive function.
Algoritma dan Struktur Data
Design and Analysis Algorithm
Algoritma dan Struktur Data
PERNYATAAN PERULANGAN
METHODS Matakuliah: T0974 / Algoritma dan Metode Object Oriented Programming I Tahun: 2008 Versi: 1/0.
Rekursi (Recursion) Fungsi rekursi adalah fungsi yang didalam function body- nya ada statement yang memanggil dirinya sendiri. Fungsi rekursif, sangat.
PERNYATAAN SELEKSI Matakuliah : Algoritma dan Metode Object Oriented Programming I Tahun : 2009 Versi : 1/0.
STRUKTUR DATA (10) recursive function
Algoritma dan Struktur Data
Bina Nusantara Mata kuliah:K0144/ Matematika Diskrit Tahun:2008 FUNGSI REKURSIF Pertemuan 10:
1 Pertemuan Fungsi Matakuliah: T0616 / Algoritma dan Pemrograman Tahun: 2007 Versi: 1/0.
Pertemuan 1 Rekursi jual [Valdo] Lunatik Chubby Stylus.
MATERI PERKULIAHAN ANALISIS ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
Induksi Matematika.
DIG1G3 Implementasi Struktur Data
Pernyataan Pertemuan 3 Season 1
PERNYATAAN PERULANGAN
Algoritma rekursif dan relasi rekurensi
METHODS Mr. Yasri Object Oriented Program.
Algoritme dan Pemrograman
PERNYATAAN SELEKSI Matakuliah : T0974 / Algoritma dan Metode Object Oriented Programming I Tahun : 2008 Versi : 1/0.
Fungsi.
REKURSIF Learning Outcomes Pada akhir pertemuan ini, mahasiswa mampu:
Mata kuliah :K0362/ Matematika Diskrit Tahun :2008
TEL 2112 Dasar Komputer & Pemograman Contoh Pemecahan Masalah 2
Algoritme dan Pemrograman
TEL 2112 Dasar Komputer & Pemograman Contoh Pemecahan Masalah
REKURSI Struktur data.
Algoritma dan Struktur Data 1 pertemuan 10
FUNGSI.
~ PERTEMUAN 8 STRUKTUR REKURSIF ~
Recursive function.
STRUKTUR DATA (10) recursive function
Oleh : UMMU ZAHRA ALGORITMA.
PART 7 TEKNIK REKURSIF DOSEN : AHMAD APANDI, ST.
Algoritma Rekursif.
Array / Larik.
UJIAN TERDIRI ATAS 50 SOAL
ARRAY UNRIYO.
Algoritma Rekursif Alpro-2.
Rekursif By Serdiwansyah N. A..
Berapakah jumlah dari n bilangan ganjil positif pertama?
Analisa algoritma rekursif
Dasar-Dasar Pemrograman
Dasar-Dasar Pemrograman
PERTEMUAN V F U N G S I Tujuan membuat suatu fungsi
Rekursif Yuliana Setiowati. Rekursif Proses yang memanggil dirinya sendiri. Merupakan suatu fungsi atau prosedur Terdapat suatu kondisi untuk berhenti.
Transcript presentasi:

Rekursif Rizki Muliono,M.Kom

Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu: Menjelaskan definisi rekursif Menerapkan rekursif dalam pembuatan program Membedakan rekursif dan iteratif

Outline Materi Definisi rekursif Deklarasi rekursif Penggunaan rekursif Analisa rekursif dan iterasi

Definisi Rekursif Method yang memanggil dirinya sendiri Berguna untuk teknik pemrograman Lebih memudahkan pemecahan masalah tertentu Contoh: Faktorial 0! = 1; n! = n x (n – 1)!; n > 0 Memerlukan kondisi penghentian (stopping condition atau base case)

Deklarasi Rekursif Contoh deklarasi rekursif: public static long factorial(int n) { if(n==0) // stopping condition / base case return 1; else return n * factorial(n-1); // recursive call } Pemanggilan factorial (diri sendiri)  rekursif Dipanggil sampai mencapai kondisi n == 0 (stopping condition atau base case)

Penggunaan Rekursif

Penggunaan Rekursif factorial(4) return 4 * factorial(3) Step 0: executes factorial(4) Step 9: return 24 return 4 * factorial(3) Step 1: executes factorial(3) Step 8: return 6 return 3 * factorial(2) Step 2: executes factorial(2) Step 7: return 2 return 2 * factorial(1) Step 3: executes factorial(1) Step 6: return 1 return 1 * factorial(0) Step 4: executes factorial(0) Step 5: return 1 return 1

Penggunaan Rekursif Faktorial lebih baik menggunakan loop int hasil = 1; if(bil>1) { for(int i=2; i<=bil; i++) hasil *= i; } Faktorial baik dalam merepresentasikan rekursif

Penggunaan Rekursif Fibonacci: Dimulai dari 0 dan 1 Bilangan berikutnya penjumlahan dari 2 bilangan sebelumnya fib(0) = 0 fib(1) = 1 fib(index) = fib(index – 2) + fib(index – 1); index > =2 Index 1 2 3 4 5 6 7 8 9 10 11 Seri 13 21 34 55 89

Penggunaan Rekursif

Penggunaan Rekursif

Penggunaan Rekursif Palindrom: kata, frasa, bilangan, atau kalimat yang dibaca sama dari 2 arah pembacaan Contoh: Civic Level Rotator Was it a rat I saw 58285 20-02-2002

Penggunaan Rekursif

Penggunaan Rekursif

Penggunaan Rekursif Method isPalindrome pertama mengecek apakah string tersebut palindrom Method isPalindrome kedua mengecek apakah substring tersebut palindrom Teknik mendeklarasikan method bantuan untuk rekursif  recursive helper method Berguna untuk string dan array

Rekursif vs Iteratif Rekursif: Iteratif: Bentuk alternatif kontrol program Repetisi tanpa loop Memanggil methodnya sendiri Memerlukan pernyataan seleksi (if) untuk base case/stopping condition Memerlukan memori lebih banyak Waktu eksekusi lebih lambat Terkadang lebih jelas, sederhana dibandingkan iteratif Iteratif: Merupakan struktur kontrol (fundamental dari bahasa pemrograman) Spesifikasi loop body Dikontrol oleh loop-control-structure Memori lebih sedikit dan waktu proses lebih cepat Permasalahan yang dapat diselesaikan oleh rekursif pasti bisa diselesaikan oleh iteratif

Did You Know? Infinite recursion (rekursif tak terhingga) terjadi jika tidak ada stopping condition atau base case Contoh pada Faktorial public static long factorial(int n) { return n * factorial(n-1); // recursive call } Menyebabkan StackOverflowError Solusi if(n==0) // stopping condition / base case return 1;

Advanced Learning Tower of Hanoi: contoh rekursif klasik Mudah diselesaikan dengan rekursif Terdapat 3 menara (tower) dan beberapa cakram (disk) dengan ukuran berbeda Disk atas harus lebih besar daripada disk bawah Semua disk berawal dari tower pertama Hanya 1 disk yang boleh dipindahkan dalam sekali waktu Semua disk harus dipindahkan ke tower akhir

Advanced Learning

Advanced Learning

Advanced Learning

Fungsi Rekursif (Berulang) Rekursif VS Iterasi

Definisi Recursive = Berulang Recursive function = fungsi rekirsif = fungsi yang berulang di dalam fungsi tersebut dia memanggil dirinya sendiri

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)!

Faktorial (n) atau n! didefinisikan sebagai berikut : jika n = 0, n! = 1 jika 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

Fungsi Iteratif 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){ for(i=1; i<=n; i++)

Fungsi Rekursif Contoh perhitungan 5 faktorial 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 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

Fungsi Rekursif Fungsi faktorial Base case: n = 0 Reduction step: f(n) = n * f(n-1) // rekursif long faktorialRekursif(long n) mulai if(n==0) return (1); else return(n * faktorialRekursif(n-1)); selesai tutup

Rekursif vs Iteratif Contoh: Faktorial - Rekursif long faktorial(long n) mulai if(n==0) return (1); else return(n*faktorial(n-1)); selesai tutup Faktorial - Iteratif // dekremental long faktorial(long n) mulai long i, faktorial = 1; for(i=n; i>=1; i--) faktorial *= i; return faktorial; selesai tutup

Rekursif vs Iteratif Rekursif Iteratif Pengulangan 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) Iteratif Pengulangan 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)

Kekurangan Rekursi 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. Apakah stack ?

Kapan Rekursi? 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)

Bilangan Fibonacci 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

Misalkan jika ditanya berapa suku ke-4 dari barisan fibonachi? = 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

Bilangan Fibonacci 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; selesai tutup Fungsi fib() di atas ditulis secara rekursif dan disebut sebagai slow_Fib() Tulislah fast_Fib() jika menggunakan iterasi.

Bilangan Fibonacci + + + + Contoh : Skema fibonacci jika N=4 FIB (4)

Latihan Implementasikan algoritma rekursi untuk fungsi fibonaci dan rekursif!

Recursif faktorial C++

Recursif faktorial C++ #include <iostream> using namespace std; long rekursiffaktorial(int f) {      if (f == 0)         return 1;     else         return f * rekursiffaktorial(f - 1); } int main() {     int x;       int n = 4;     cout << n << "! = "<< rekursiffaktorial(n) << endl;

Recursif faktorial C++ n = 9; cout << n << "! = “ << rekursiffaktorial(n) << endl; cout<<"Masukan Angka yang akan difaktorialkan : "; cin>>x; cout << x <<"! = " << rekursiffaktorial(x) <<endl;       return 0; }

Faktorial C++

Referensi Introduction to Java Programming. 7ed. Liang. 2009. ch 20 Java Software Solutions. 5ed. Lewis & Loftus. 2007. ch 11 Fibonacci. http://en.literateprograms.org/Fibonacci_numbers_(Jav a) Palindrome. http://en.wikipedia.org/wiki/Palindrome Towers of Hanoi. http://www.codeproject.com/KB/graphics/Towers_of_Hanoi/Towers_of_Hanoi.j pg http://www.codeproject.com/KB/graphics/Towers_of_Hanoi.aspx http://www.java2s.com/Tutorial/Java/0100__Class- Definition/TheTowersofHanoi.htm http://pirate.shu.edu/~wachsmut/Java/Hanoi/index.html

Rekursif II

Definisi Rekursif Ada kalanya kita mengalami kesulitan untuk mendefinisikan suatu obyek secara eksplisit. Mungkin lebih mudah untuk mendefinisikan obyek tersebut dengan menggunakan dirinya sendiri. Ini dinamakan sebagai proses rekursif. Kita dapat mendefinikan barisan, fungsi dan himpunan secara rekursif.

Barisan yang didefinisikan secara rekursif Contoh: Barisan bilangan pangkat dari 2 an = 2n untuk n = 0, 1, 2, … . Barisan ini dapat didefinisikan secara rekursif: a0 = 1 an+1 = 2an untuk n = 0, 1, 2, … Langkah-langkah untuk mendefinisikan barisan secara rekursif: Langkah basis: Spesifikasi anggota awal. Langkah rekursif: Berikan aturan untuk membangun anggota baru dari anggota yang telah ada.

Contoh barisan yang didefinisikan secara rekursif Berikan definisi rekursif dari an=rn, dengan rN, r≠0 dan n bilangan bulat positif. Solusi: Definisikan a0=r0=1 dan an+1=r . an untuk n = 0, 1, 2, …

Fungsi yang didefinisikan secara rekursif Langkah-langkah untuk mendefinisikan fungsi dengan domain bilangan cacah: Langkah basis: Definisikan nilai fungsi pada saat nol. Langkah rekursif: Berikan aturan untuk mencari nilai fungsi untuk setiap bilangan bulat berdasarkan nilai fungsi pada bilangan bulat yang lebih kecil. Definisi seperti itu disebut rekursif atau definisi induktif.

Contoh fungsi yang didefinisikan secara rekursif f(0) = 3 f(n + 1) = 2f(n) + 3 Maka f(1) = 2f(0) + 3 = 23 + 3 = 9 f(2) = 2f(1) + 3 = 29 + 3 = 21 f(3) = 2f(2) + 3 = 221 + 3 = 45 f(4) = 2f(3) + 3 = 245 + 3 = 93

Contoh fungsi yang didefinisikan secara rekursif (2) Bagaimana kita dapat mendefinisikan fungsi faktorial f(n) = n! secara rekursif? f(0) = 1 Karena (n+1)! = n! (n+1) maka f(n + 1) = (n + 1)f(n) f(1) = 1 f(0) = 1  1 = 1 f(2) = 2 f(1) = 2  1 = 2 f(3) = 3 f(2) = 3  2 = 6 f(4) = 4 f(3) = 4  6 = 24

Contoh fungsi yang didefinisikan secara rekursif (3) Bagaimana kita dapat mendefinisikan fungsi secara rekursif?

Contoh terkenal: Bilangan Fibonacci f0 = 0, f1 = 1 fn = fn-1+ fn-2, n=2,3,4,… f0= 0 f1= 1 f2= f1+ f0= 1 + 0 = 1 f3= f2+ f1= 1 + 1 = 2 f4= f3+ f2= 2 + 1 = 3 f5= f4+ f3= 3 + 2 = 5 f6= f5+ f4= 5 + 3 = 8 Tunjukkan bahwa untuk n  3, fn < n dengan  = (1+√5)/2.

Himpunan yang didefinisikan secara rekursif Langkah-langkah dalam mendefinisikan suatu himpunan secara rekursif: Langkah basis: Spesifikasi koleksi awal dari anggota Langkah rekursif: Mendefinisikan aturan konstruksi anggota baru dari anggota yang telah diketahui

Contoh himpunan yang didefinisikan secara rekursif Misalkan S didefinisikan secara rekursif oleh: 3  S (x+y)  S jika x  S dan y  S Maka S adalah himpunan bilangan bulat positif yang habis dibagi 3. Bukti: Misalkan A himpunan yang beranggotakan semua bilangan bulat positif yang habis dibagi 3. Untuk membuktikan bahwa A = S, harus ditunjukkan A  S and S  A. Bagian I: Akan dibuktikan A  S, yaitu menunjukkan bahwa setiap bilangan bulat positif yang habis dibagi 3 ada di S (dengan menggunakan induksi matematika).

Contoh himpunan yang didefinisikan secara rekursif (2) Misalkan P(n): proposisi “3n anggota S”. Langkah basis: P(1) benar, karena 3  S. Langkah induktif: Asumsikan P(k) benar, yaitu 3k  S. Akan ditunjukkan P(k+1) juga benar, yaitu 3(k+1)  S Karena 3k  S dan 3  S, berdasarkan definisi rekursif dari S, 3k+3 = 3(k+1) juga ada di S. Konklusi: Jadi, setiap bilangan bulat positif yang habis dibagi 3 ada di S. Kesimpulan dari bagian I adalah A  S.

Contoh himpunan yang didefinisikan secara rekursif (3) Bagian II: Akan ditunjukkan S  A dengan menggunakan definisi rekursif dari S. Langkah basis: Akan ditunjukkan setiap anggota awal S ada di A. Karena 3 habis dibagi 3 maka 3  A. Langkah rekursif: Akan ditunjukkan bahwa setiap bilangan bulat yang dibangun dengan mengunakan langkah rekursif juga merupakan anggota A, yaitu (x+y)  A jika x,y  S (yang diasumsikan  A). Jika x dan y keduanya di A, maka 3 | x dan 3 | y. Akibatnya, 3 | (x + y). Kesimpulan dari bagian II adalah S  A. Jadi, secara keseluruhan, berlaku A = S.

Induksi Struktural Dalam membuktikan hasil-hasil yang berkaitan dengan himpunan yang didefinisikan secara rekursif, akan lebih mudah apabila digunakan suatu bentuk induksi matematika yang disebut induksi struktural. Langkah-langkah dalam induksi struktural: Langkah basis: Menunjukkan bahwa hasil yang akan dibuktikan berlaku untuk semua anggota awal. Langkah rekursif: Menunjukkan bahwa jika hasil yang akan dibuktikan berlaku untuk anggota-anggota yang digunakan untuk membangun anggota baru, maka hasil tersebut juga berlaku untuk anggota yang baru dibangun.

Himpunan string atas alfabet Himpunan string * atas alfabet  dapat didefinisikan secara rekursif oleh: Langkah basis:   * ( adalah string kosong yang tidak memuat simbol) Langkah rekursif: Jika w  * dan x   , maka wx  * Contoh: Jika  = {0,1} maka string yang merupakan anggota * adalah: yang didefinisikan sebagai anggota * dalam langkah basis, 0 dan 1 yang dibentuk dalam langkah rekursif pertama, 00, 01, 10, dan 11 yang dibentuk dalam langkah rekursif kedua, dst

Himpunan string atas alfabet (2) Konkatenasi Sebagai operasi kombinasi dari dua string, konkatenasi didefinisikan secara rekursif sebagai: Langkah basis: Jika w *, maka w.  = w, dengan  string kosong Langkah rekursif: Jika w1  * dan w2  * dan x  , maka w1 . (w2 x) = (w1 . w2) x w1 . w2 seringkali ditulis sebagai w1 w2 Contoh: Konkatenasi dari w1 = meng dan w2 = apa adalah w1 w2 = mengapa

Himpunan string atas alfabet (3) Panjang string Panjang dari string w, l (w) dapat didefinisikan secara rekursif oleh: l () = 0, l (w x) = l (w) + 1 jika w  * dan x  . Gunakan induksi struktural untuk membuktikan bahwa l (x y) = l (x) + l (y).

Perluasan induksi Induksi matematika dapat diperluas untuk membuktikan hasil-hasil mengenai himpunan yang memiliki sifat terurut dengan baik. Contoh: himpunan N x N

Contoh perluasan induksi Misalkan didefinisikan secara rekursif untuk (m,n) N x N oleh dan Tunjukkan bahwa untuk setiap (m,n) N x N.

Rekursif Deret Fibonanci

Rekursif Proses yang memanggil dirinya sendiri. Merupakan suatu fungsi atau prosedur Terdapat suatu kondisi untuk berhenti.

Faktorial Konsep Faktorial n! = n(n-1)(n-2)…1 Dapat diselesaikan dengan Cara Biasa Rekursif

Faktorial : Cara Biasa Int Faktorial(int n) { if (n<0) return -1 ; else if (n>1) S = 1 ; for(i=2 ;i<=n;i++) S = S * n ; return S ; } else return 1 ;

Faktorial dengan Rekursif Int Faktorial(int n) { if (n<0) return -1 else if (n>1) Return (n*Faktorial(n-1)) Else Return 1 ; }

Deret Fibonacci Leonardo Fibonacci berasal dari Italia 1170- 1250 Deret Fibonacci f1, f2,… didefinisikan secara rekursif sebagai berikut : f1 = 1 f2 = 2 fn = fn-1 + fn-2 for n > 3 Deret: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597,…

Deret Fibonacci procedure fab(n) if n=1 then return 1 return (fab(n-1) + fab(n-2)) end

Rekursif Tail Jika pernyataan terakhir yang akan dieksekusi berada dalam tubuh fungsi Hasil yang kembali pada fungsi tsb bukanlah bagian dari fungsi tersebut. Tidak memiliki aktivitas selama fase balik.

Rekursif Tail : Faktorial() F(4,1) = F(3,4) Fase awal F(3,4) = F(2,12) F(2,12) = F(1,24) F(1,24) = 24 Kondisi Terminal 24 Fase Balik Rekursif Lengkap

Latihan Algoritma BinRec(n) //input : Bilangan desimal integer positif n //output : Jumlah digit biner yang dinyatakan dengan n If (n=1) return 1 Else return BinRec( n/2 ) + 1