KABAFORCEGeliştirici KabaOS'u edinin

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.kbl

Kaynak 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("")