pl/slq de fibonacci sayı dizisini oluşturma
Merhaba
Hayatında herkes Fibonacci sayı dizisini duymuştur. Bu konuda detaylı bilgi Leonardo Fibonacci linkinden ve özet ve basit bilgiyi ise Fibonacci Dizisi adresinden görebilirsiniz.
Bilindiği gibi Fibonacci dizisi bir matematiksel işlemdir. Herhangi bir programlama dili ile bu dizi rahatlıkla oluşturulabilinir.Fibonacci dizisinin temel formülü F(n-1)+F(n-2) şeklindedir. Pl/Sql ile de bir Fibonacci dizisi oluşturabiliriz.

DECLARE
fibo VARCHAR2(4000);
FUNCTION fibonacci(n NUMBER) RETURN NUMBER IS
BEGIN
IF n = 0 OR n = 1 THEN
RETURN n;
ELSE
RETURN fibonacci(n - 1) + fibonacci(n - 2);
END IF;
END;
BEGIN
FOR i IN 0 .. 20 LOOP
fibo := fibo || fibonacci(i) || ' ';
END LOOP;
dbms_output.put_line(fibo);
END;
Ben örnek olarak 0-20 arasındaki sayılar için Fibonacci dizisi oluşturdum fakat bilindiği gibi Fibonacci dizisi herhangi bir sayıdan başlanılarak da oluşturulabilinir.
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
0-20 arasındaki sayılar için yukarıda gibi bir Fibonacci dizisi oluşurken bu işlemi 5-20 arasında yaparsak bahsettiğim herhangi bir sayıdan başlanıp Fibonacci dizi oluşturulduğunu ve değerlerin değişmediğini görelim.
DECLARE
fibo VARCHAR2(4000);
FUNCTION fibonacci(n NUMBER) RETURN NUMBER IS
BEGIN
IF n = 0 OR n = 1 THEN
RETURN n;
ELSE
RETURN fibonacci(n - 1) + fibonacci(n - 2);
END IF;
END;
BEGIN
FOR i IN 5 .. 20 LOOP
fibo := fibo || fibonacci(i) || ' ';
END LOOP;
dbms_output.put_line(fibo);
END;
5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
Görüldüğü gibi dizide başlangıç değeri dışında değişen bir durum olmadı. Genel Fibonacci dizisi kuralı olan F(n-1)+F(n-2) durumu ile yazılım dili ne olursa olsun istenilen Fibonacci dizisi oluşturulabilinir.
NOT: Kodlarda da göreceğiniz gibi F(n-1)+F(n-2) işlemi yapmak için n>1 olması gerekiyor. n=1 ya da n=0 olduğu durumda kodlarda görülen işlemi yapmak n değerini olduğu gibi kullanmak gerekir.
Kolay gelsin.






