Kamis, 10 November 2011

REKURSI VS ITERASI

Didalam beberapa hal, rekursi kurang efisien bila dibandingkan dengan proses iterasi. dibandingkan dengan FIBO_REK dengan FIBO_ITE dibawah ini, keduanya digunakan untuk menghitung bilangan fibonacci.

Pada contoh yang pertama fungsi FIBO_REK menggunakan proses rekursif, suatu bilangan pada suku ke N akan diperoleh melalui hubungan rekurens. Sebaliknya, cara rekursif seperti di bawah adalah kurang nyata, karena ada 2 pemanggil rekursif di ikuti yang lain. Walaupun begitu, cara rekursif dibawah menjadi terlalu jelek karena kedalaman pemanggil rekursif sangat di perlukan dan juga karena pengulangan perhitungan dari suatu hasil yang sebenarnya telah di hitung. Contoh FIBO_REK(6) membutuhkan pemanggilan FIBO_REK(5) dan FIBO_REK(4), dimana FIBO_REK(5) membutuhkan pemanggilan FIBO_REK(4) dan FIBO_REK(3) dan seterusnya.

Contoh Deret Fobonacci dengan Rekursif

{contoh fibo (program-1.pas)}
function FIBO_REK(N:integer) : integer;
begin
if (N=1) or (N=2) then
FIBO_REK := 1
else
FIBO_REK(N) := FIBO_REK(N-1) + FIBO_REK(N-2)
end;

Untuk beberapa kondisi, pemecahan secara rekursif dan iterasi mempunyai kelebihan dan kekurangan yang dapat kita bandingkan. cukup sulit untuk menentukan mana yang lebih sederhana , paling mudah dan efisien. itu tergantung pada kemampuan programer.

Contoh Deret Fibonacci dengan Iterasi

{contoh fibo iterasi (program-2.pas)}
function FIBO_ITE(N : integer) : integer;
var F, Akhir, Bantu
I : integer
begin
I := 1; F := 1; Akhir := 0;
if N= 0 then F := 0;
while I <> N do
begin
Bantu := F; I := I + 1;
F := F + Akhir;
Akhir := Bantu
end;
FIBO_ITE := F
end;