# ╔═══════════════════════════════════════════════════════════════════╗ # ║ Ö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("")