RECURSIF ALGORITHM
RECURSIFALGORITHM
Faktorial
■ Konsep Faktorial
n! = n(n-1)(n-2)…1
■ Dapat diselesaikan dengan
– Cara Biasa
– Rekursif
Algoritma iterasi tanpa rekursif
Function factorial (input n : integer) integer
{mengembalikan nilai n!}
Kamus
I : integer;
F: integer
Algoritma
F 1;
I 1;
While i<= n do
F <-- F*I
i i+1;
End while
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
■
■ if n=2 thenreturn 2
■ return (fab(n-1) + fab(n-2))
■ end
Algoritma Rekrusif
■ Disebut sebuah algoritma rekursif jika memecahkan
masalah dengan mengurangi untuk kasus yang sama,masalah yang
sama dengan inputan lebih kecil
■ Fungsi rekursif harus mengandung setidaknya satu cabang non-rekursif.
■ Pemanggilan rekursif akhirnya harus mengarah pada cabang non-rekursif
Rekursif VS Iterasi
■ Untuk setiap algoritma rekursif, terdapat pengulangan/iterasi
yang dapat digunakan sebagai rekursive
■ Sebuah algoritma yang mengandung iterasi menggunakan bentuk
pengulangan
■ Sebuah algoritma recursive menggunakan algoritma rekursif bentuk
percabangan
Rekursif VS Iterasi
■ Solusi rekursive yang sering kurang efisien, baik dalam hal kecepatan/waktu dan
space, daripada solusi iterasi
■ Rekursi dapat menyederhanakan solusi masalah, mengakibatkan source
code yang mudah dipahami atau lebih pendek
Kapan saat tidak menggunakan recursive?
1. Saat Bahasa pemrograman tidak mendukung recursive, misal fortran
2. Saat menggunakan recursive malah membuat dua kali lipat resource nya missal
pada Fibonacci.
latihan
■ Nyatakan fungsi a pangkat n dalam fungsi rekursif !
Dimana a pangkat n = a * a * a… *a (sebanyak n kali)
= a*a pangkat n - 1
#include <stdio.h>
#include <conio.h>
#include "stdio.h"
int Fak(int N);
main() {
int N;
printf("N! : ");
scanf("%d",&N);
printf("\n%d! adalah %d", N, Fak(N));
}
int Fak(int N) {
if (N == 0)
return 1;
else
return N*Fak(N-1);
}
Soal e-learning kelas 22
1. Sebutkan judul tema tugas UAS anda !
2. Buatlah flow card untuk bagian algoritma rekursif tema tugas anda !
3. Buatlah pseudocode bagian algoritma rekursif tema tugas anda!
4. Implementasikan dalam sebuah procedure/function bagian rekursif tema tugas !
Dalam Bahasa C simpan dalam file cpp
5. Screenshot hasil running nya !
Tugas diupload di fti.mercubuana-yogya.ac.id dikumpulkan paling lambat tgl 19 juni
2017, perhatikan tgl dan jam input !