Fibonacci Serisi Nedir?
En basit haliyle bir Fibonacci dizisi sıfır ve bir ile başlar ve daha sonra gelen sayı kendisinden önceki iki sayının toplamından oluşarak sonsuza kadar gidebilir. Bu serinin ilginç özelliği ise; seri büyüdükçe seri sonundaki sayının kendisinden önceki sayıya bölümünün altın orana yani 1.618… sayısına yaklaşmasıdır.
1, 1, 2, 3, 5, 8, 13, 21, 34…
Bu seriyi üretmenin için pek çok algoritma türetilebilir. Bu yazıda ES6 ile gelen Generator function özelliği deneyerek çözeceğiz.
Fonksiyonumuz bu şekilde;
function* fibonacci_uret (n, current = 0, next = 1) { if (n === 0) { return 0; } yield current; yield* fibonacci_uret(n - 1, next, current + next); } var uretec = fibonacci_uret(10); console.log(uretec.next().value); // 0 console.log(uretec.next().value); // 1 console.log(uretec.next().value); // 1 console.log(uretec.next().value); // 2 console.log(uretec.next().value); // 3
Burada ilk dikkat çeken function* ifadesi. Normal bir fonksiyon tanımına asteriks(*) eklendiğinde bu artık bir Generator function tanımına dönüşüyor.
n parametresi serinin ulaşabileceği maksimum sayı, current ve next parametreleri ise serinin o anki ve bir sonraki elemanlarını gösteriyor. Açıklamada belirttiğim gibi sıfır ve bir değerleri başlangıç veriliyor diziye.
yield ifadesi ile Generator’ımızın burada bir değer döndürmesini ve bir daha çağırıldığında işlemine buradan devam etmesini sağlıyoruz. Yani ilk çağırdığımızda sıfır dönmesini sağlayan ifade bu.
İkinci kez next ile çağrıldığında ise yield* satırından devam ediyor. Asteriksli yield ifadesi ise yeni bir Generator çağırmamıza izin veriyor, burada kendi kendini çağırdığı gibi. Yeni parametreler ile çağrılan fonksiyon yield satırında tekrar bir değer dönerek duruyor ve çağırmamızı bekliyor.
Daha fazla bilgi için:
Mozilla – function*
Mozilla – Generator
Bir cevap yazın