Algoritmalar · 82 satır
Özyineleme
Fibonacci ve faktöriyel iki yolla; altın orana yakınsama ve özyinelemenin bedeli.
Önizleme · 0.6.0 — dil 1.0 öncesidir; sözdizimi ve kütüphane değişebilir. Buradaki her örnek derlenerek sınanır.
Çalıştırın
Uçbirim
kabalang calistir 06_ozyineleme.kblKaynak kod
06_ozyineleme.kbl
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ ÖZYİNELEME — Fibonacci, faktöriyel ve altın orana yakınsama ║
# ║ Aynı problem iki yolla: özyineleme (yavaş) ve döngü (hızlı). ║
# ╚═══════════════════════════════════════════════════════════════════╝
kullan kaba.sistem
fonksiyon renkli(yazi: metin, renk: sayi):
don "\033[38;5;" + metin(renk) + "m" + yazi + "\033[0m"
fonksiyon baslik(yazi: metin):
yazdir("")
yazdir(renkli(" " + yazi, 81))
yazdir(renkli(" " + "─".tekrarla(56), 238))
# ── Özyineleme: fonksiyon kendini çağırır ─────────────────────────────
fonksiyon fib(n):
eger n < 2:
don n
don fib(n - 1) + fib(n - 2)
fonksiyon faktoriyel(n):
eger n <= 1:
don 1
don n * faktoriyel(n - 1)
# ── Aynı iş, döngüyle: her sayı bir kez hesaplanır ────────────────────
fonksiyon fib_dongu(n):
a = 0
b = 1
i = 0
iken i < n:
c = a + b
a = b
b = c
i = i + 1
don a
baslik("FIBONACCI — özyineleme ile")
i = 0
satir = " "
iken i <= 15:
satir = satir + renkli(metin(fib(i)) + " ", 78)
i = i + 1
yazdir(satir)
baslik("ALTIN ORANA YAKINSAMA — ardışık oranlar")
# Fibonacci sayılarının oranı φ = 1,618… değerine yaklaşır.
i = 2
iken i <= 14:
onceki = fib_dongu(i)
simdiki = fib_dongu(i + 1)
oran = ondalik(simdiki) / ondalik(onceki)
dolu = (oran - 1.0) * 40
cubuk = "█".tekrarla(dolu)
# `metin(ondalik)` iki basamak gösterir; yakınsamayı görmek için üç
# basamak elle kurulur: tam kısım + binde bir hassasiyetli kesir.
tam = sayi(oran)
kesir = sayi((oran - ondalik(tam)) * 1000)
yazdir(" " + renkli(cubuk, 220) + renkli(" " + metin(simdiki) + "/" + metin(onceki) + " = " + metin(tam) + "." + metin(kesir), 245))
i = i + 1
yazdir(renkli(" altın oran φ ≈ 1.618", 78))
baslik("FAKTÖRİYEL")
i = 1
iken i <= 10:
yazdir(" " + renkli(metin(i) + "! = " + metin(faktoriyel(i)), 245))
i = i + 1
baslik("İKİ YOLUN BEDELİ")
basla = zaman.milisaniye()
sonuc_ozyineli = fib(35)
ozyineli_sure = zaman.gecen_sure(basla)
basla = zaman.milisaniye()
sonuc_dongu = fib_dongu(35)
dongu_sure = zaman.gecen_sure(basla)
yazdir(" " + renkli("özyineleme : fib(35) = " + metin(sonuc_ozyineli) + " " + metin(ozyineli_sure) + " ms", 203))
yazdir(" " + renkli("döngü : fib(35) = " + metin(sonuc_dongu) + " " + metin(dongu_sure) + " ms", 78))
yazdir(renkli(" Özyineleme aynı değeri defalarca hesaplar; döngü bir kez.", 245))
yazdir(renkli(" (KabaLang yerel makine koduna derlenir — ikisi de yerel makine hızında koşar.)", 245))
yazdir("")