REKURSI atau recursion adalah proses dari suatu subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri. Proses rekursi untuk beberapa kasus merupakan algoritma yang baik dan dapat membuat pemecahan masalah lebih mudah. Akan tetapi sebagai imbalannya, proses rekursi ini harus dibayar mahal dengan memori yang banyak digunakan, dikarenakan setiap kali suatu subprogram dipanggil, maka diperlukan sejumlah tambahan memori.
Jika kita menulis siatu fungsi atau prosedur rekursi, yang perlu diperhatikan adalah fungsi atau prosedur tersebut harus mengandung suatu kondisi akhir dari proses rekursi. Kondisi ini diperlukan untuk mencegah terjadinya proses rekursi yang tidak berujung (indefinite), yaitu proses rekursi akan dilakukan tanpa henti.
Berikut ini contoh program : Rekursi mengurutkan data metode quick sort dalam bentuk prosedur.
program sort;
{$APPTYPE CONSOLE}
uses SysUtils;
type
tipelarik=string[20];
larikUrut=array[1..1000] of Tipelarik;
Procedure QuickSort (var x : LarikUrut;bawah,atas:word);
var
I,J:word;
sementara:TipeLarik;
begin
While atas>Bawah Do
begin
I:=Bawah;
J:=Atas;
sementara:=x[bawah];
{memecak larik menjadi dua bagian}
while I<J Do
begin
while x[j]>sementara do
J:=J-1;
x[i]:=x[j];
while (I<J) and (x[i]<=sementara) do
I:=I+1;
x[j]:=x[i];
end;
x[i]:=sementara;
{urutkan rekursi}
quicksort(x,bawah,I-2);
bawah:=I+1;
end;
end;
var
nama:larikurut;
N,I:word;
begin
write ('jumlah data akan diurutkan ?');readln(n);
writeln;
writeln('masukkan data = ');
for I:=1 to N do
begin
write ('data ke',I,'?');readln(nama[I]);
end;
{urutkan dengan procedure quick sort}
quicksort (nama,1,N);
{tampilkan data yang urut}
writeln;
writeln ('data yang telah urut = ');
for I:=1 to n do
writeln (nama[I]);
readln;
end.
Tidak ada komentar:
Posting Komentar