11 rekursi

20
8/8/2019 11 Rekursi http://slidepdf.com/reader/full/11-rekursi 1/20 REKURSI Oleh: M. Ade Erik (19870911 201001 1 006) Doc Versi. 11.00/Pas/OSN/TIK/2010 SMA Negeri 1 Tegal

Upload: m-ade-erik

Post on 09-Apr-2018

251 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 1/20

REKURSIOleh: M. Ade Erik (19870911 201001 1 006)

Doc Versi. 11.00/Pas/OSN/TIK/2010

SMA Negeri 1 Tegal

Page 2: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 2/20

Pembahasan:

Faktorial

Perkalian

Pencarian Biner 

Quick Short

Page 3: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 3/20

Rekursi

Rekursi Mer upakan teknik pemanggilan r utin oleh dirinya

sendiri.

Rekursi juga digunakan untuk menyedarhanakan

algoritma yang ada sehingga penulisan program lebihefesien.

Page 4: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 4/20

Contoh Efesiensi

f unction

faktorial(x:integer):integer;

var i, hasil:integer;

begin hasil:=1;

for i:=x downto 1 do begin

hasil:=hasil*i;

end;

faktorial:=hasil;

End;

f unction

faktorial2(x:integer):integ

er;

begin

if (x=0) then faktorial2:=1

else

faktorial2:=x*faktorial2(x-

1);

end;

Page 5: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 5/20

Rekursi Faktorial

Faktorial: contoh: 5! = 5x4x3x2x1 = 120 atau 5x4! = 120

Maka bentuk rekursinya:

f unction faktorial(x:integer):integer;

begin

if (x=0) then faktorial:=1

else

faktorial:=x*faktorial(x-1);

end;

Page 6: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 6/20

Penjelasan

Faktorial(5)=5*faktorial(4)

Faktorial(4)=4*faktorial(3)

Faktorial(3)=3*faktorial(2)

Faktorial(2)=2*faktorial(1)

Faktorial(1)=1*faktorial(0)

faktorial(0)=1

Page 7: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 7/20

Rekursi Per pangkatan

Per pangkatan: contoh: x^y= x*x^(y-1) = 3*3^4 = 3^5

Maka bentuk rekursinya:

f unction per pangkatan(x,y:integer):integer;

begin

if (y=0) then per pangkatan:=1

else

per pangkatan:=x*per pangkatan(x,y-1);

end;

Page 8: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 8/20

Penjelasan

pangkat(5,3)=5*pangkat(5,2)

pangkat(5,2)=5*pangkat(5,1)

pangkat(5,1)=5*pangkat(5,0)

Page 9: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 9/20

Rekursi Fibonacci

bilangan Fibonacci adalah barisan yang didefinisikan

secara rekursif sebagai berikut:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,

987, 1597, 2584, 4181, 6765, 10946..

Page 10: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 10/20

Rekursi Fibonacci

f unction fibonacci(x:integer):integer;

begin

if (x=0) then fibonacci:=0

else

if (x=1) then fibonacci:=1

else

fibonacci:=fibonacci(x-1)+fibonacci(x-2);

end;

Page 11: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 11/20

Bubble Sort

Teknik ini menyusun data yang diinginkan secara

ber ur utan dengan membandingkan elemen data yang

ada.

Syntact procedure bsort(x:integer);

var i,j,t:integer;

begin

for i:=1 to x-1 do begin for j:=i+1 to x do begin

if data[i]>data[j] then begin swap(data[i],data[j]); end;

end; end;end;

Page 12: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 12/20

Ilustrasi Bouble Sort

Page 13: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 13/20

Contoh

uses wincrt;

type larik=array [1..7] of integer;

var data:larik;n,k:integer;

procedure swap(var c,d:integer);

var t:integer; begin

t:=c; c:=d; d:=t;

end;

procedure bsort(x:integer);

var i,j,t:integer;

begin

for i:=1 to x-1 do begin

for j:=i+1 to x do begin

if data[i]>data[j] then begin

swap(data[i],data[j]); end;

end; end; end;

begin

n:=7;

for k:=1 to n do

begin

write('data ke ',k,'= ');readln(data[k]);

end;

bsort(n);

writeln('==bouble sort==');

for k:=1 to n do

begin

write(data[k],' '); end;

end.

Page 14: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 14/20

Quick Sort

Membandingkan suatu elemen (disebut pivot) dengan

elemen yang lain dan menyusunnya sedemikian r upa

sehingga elemen- elemen lain yang lebih kecil daripada

pivot tersebut terletak di sebelah kirinya dan elemen-

elemen lain yang lebih besar daripada pivot tersebut

terletak di sebelah kanannya. Sehingga dengan demikian

telah terbntuk dua sublist, yang terletak di sebelah kiri dan

kanan dari pivot. Lalu pada sublist kiri dan sublist kanan

kita anggap sebuah list bar u dan kita kerjakan prosesyang sama seperti sebelumnya. Demikian seter usnya

sampai tidak terdapat sublist lagi. Sehingga didalamnya

telah terjadi proses Rekursif.

Page 15: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 15/20

IlustrasiQuick Sort

Page 16: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 16/20

 AlgoritmaQuicksort

procedure qsort(a,b:integer);

Var pivot: integer; left, right: integer;

begin

if (b > a) then begin pivot := data[(a + b) div 2]; left := a; right := b;

while (left <= right) do begin

while (data[left] < pivot) do left := left + 1;

while (data[right] > pivot) do right := right - 1;

if (left <= right) then begin swap(data[left],data[right]);

left := left + 1;right := right - 1;

end;end;qsort(a, right);qsort(left, b);end;end;

Page 17: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 17/20

Contoh

uses wincrt;

type larik=array [1..7] of integer;

var data:larik;n,k:integer;

procedure swap(var c,d:integer);

var t:integer; begin

t:=c; c:=d; d:=t;

end;

procedure qsort(a,b:integer);

Var pivot: integer; left, right: integer;

begin

if (b > a) then begin

pivot := data[(a + b) div 2]; left := a; right := b;

while (left <= right) do begin

while (data[left] < pivot) do left := left + 1;

while (data[right] > pivot) do right := right - 1;

if (left <= right) then begin

swap(data[left],data[right]);

left := left + 1;right := right - 1;

end; end; qsort(a, right); qsort(left, b);

end;end;

begin

n:=7;

for k:=1 to n do

begin

write('data ke ',k,'= ');readln(data[k]);

end;

qsort(1,n);

writeln('==quicksort==');

for k:=1 to n do

begin

write(data[k],' ');

end;

end.

Page 18: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 18/20

Page 19: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 19/20

Page 20: 11 Rekursi

8/8/2019 11 Rekursi

http://slidepdf.com/reader/full/11-rekursi 20/20

Contoh

uses wincrt;

type larik=array [1..7] of integer;

var data:larik;n,k:integer;

f unction bsearch(cari,n:integer):integer;

var atas,tengah,bawah:integer;

ketemu :boolean; Begin

atas:=n;bawah:=1;ketemu:=false;

while not(ketemu) do begin

tengah:=(atas+bawah) div 2;

If data[tengah]=cari then begin

ketemu:=tr ue;

bsearch:=tengah;

end

else if cari<data[tengah] then

atas:=tengah-1

else bawah:= tengah+1;

if (bawah>atas) then begin

ketemu:=tr ue;

bsearch:=0; end; end; end;

Begin n:=7;

for k:=1 to n do begin

write('data ke ',k,'= ');readln(data[k]);

end; qsort(1,n);

writeln('==quick sort==');

for k:=1 to n do begin

write(data[k],' ');

writeln; end;

write('cari data=');readln(k);

write('hasil=',bsearch(k,n)); end.