Ünlü bir alıştırma yapalım ve bu bir mülakat sorusu olarak karşımıza çıkabilir.
Fibonacci sayılarını uygulamaya çalışacağız.
Fibonacci sayıları da böyledir.
İlk sayı sıfırdır.
O zaman ikinci sayı birdir.
Her zaman sıfır bir ile başlarlar.
O zaman şöyle olur.
Bir sonraki sayıya eşit olmak için sıfır ile bir ekleriz.
Bir sonraki sayıya eşit olmak için bir ile bir ekleriz.
Bir sonraki sayıyı elde etmek için bir ile ikiyi, bir sonraki sayıyı elde etmek için üçü, bir sonraki sayıyı elde etmek için beşi, bir sonraki sayıyı
elde etmek için sekizi vb. ekleriz.
Gördüğünüz gibi, bu katlanarak büyüyor.
Gerçekten çok hızlı büyüyor.
Ve bu tür bir numaralandırma aslında doğada çokça görülür.
Ancak bu aynı zamanda ilginç bir sorundur çünkü bu sayılar başlangıçta gerçekten çok
yavaş büyüyor olsalar da giderek büyürler ve kaynakları gerçekten tüketen bir sorun haline
gelirler.
Senden yapmanı istediğim şey şu.
Bir fonksiyon oluşturacağız.
FIB.
Bu bir sayı gerektirir.
Ve burada bu sayı Fibonacci'nin indeks numarası olacak.
Örneğin, 20. sayı olsaydı, şu şekilde olması gerekirdi.
Yani eğer istersem, diyelim ki fib 20.
İşte, bu durumda, tüm bu sayıları geri getirmenizi istiyorum.
Jeneratör kullanılıyor.
Yani bu konuma gelene kadar teker teker.
Şimdi bunu yapmanın iki yolu var.
Liste ile yapabilirsiniz ya da bir jeneratör ile yapabiliriz.
Ve bir jeneratörle bunu yapmanın bir listeyle yapmaktan çok daha kolay olduğunu fark edeceksiniz, çünkü
bir listeyle eninde sonunda kaynaklarınız tükenecektir.
Sizden yapmanızı istediğim şey, burada gördüğünüz sayıların 20'ye kadar çıktısını almanız.
Ve isterseniz, bu sayıyı artırmaya devam edebilir ve ne olacağını görebilirsiniz.
Bonus olarak, bunu bir liste ile de uygulamayı deneyebilirsiniz.
Böylece dev bir listede de görüntülenir.
İsterseniz videoyu burada duraklatın.
Aksi takdirde, cevapla devam edeceğim.
İlk olarak, yapmak istediğimiz şey A'nın sıfıra ve B'nin bire eşit olacağını söylemektir.
Yani A ve B sayıların başlangıcı olacak.
Şimdi burada, düzenleme oluşturucuyu kullanacağız.
Döngü için.
Fonksiyonu sağlayacağımız bu sayı.
Şimdi burada.
Öncelikle b'nin şimdi ya da eh'nin şimdi B neyse ona eşit olmasını istiyorum, ki bu birdir ve B bir sonraki sayı neyse
o olsun.
Fibonacci ile ilgili kuralı hatırlıyor musunuz?
Üçüncü sayıyı elde etmek için ilk iki sayıyı toplarız.
Yani bir sonraki sayıyı almak için bir B, sonra bir sonraki sayıyı almak için bir B var.
Ve sonra bir sonraki numarayı almak için bir B.
Bu yüzden yapmak istediğim ilk şey aslında a'yı vermek ve hey, sadece bana a neyse onu ver demek ve ardından bir sonraki bölüme kadar
fonksiyonu duraklatmak.
Bundan sonra, for döngüsü bir sonraki bölüme geçtikten sonra, A'nın B'ye eşit olmasını istediğimi söyleyeceğim.
Ve B'nin A artı B'ye eşit olmasını istiyorum.
Bakalım bu mantıklı mı?
Diyorum ki, hey, bu listeden a döndür veya ver, böylece ilk başta sıfır olacak.
O zaman şimdi A'yı bire eşitlemenizi istiyorum çünkü ilerliyoruz ve sonra B'nin bire eşitlenmesini istiyorum
çünkü A bire dönüştü ve sonra da daha önceki bire.
Yani B iki olur.
Buraya bakarsak, bu yüzden burada A ve B'nin olmasını istiyoruz ve sonra bunun gibi sadece bir tanesinin üzerine geçmek
istiyoruz.
Yani B hala bir tane olmalı.
Yani burada yapmak isteyebileceğimiz şey aslında a'yı değiştirmemektir.
A artı B'yi yapana kadar.
Peki bunu nasıl yapabiliriz?
Basitçe şunu söyleyebiliriz.
Diyelim ki geçici bir değişken ve bu temp, buraya geldiğimizde a ne ise onu tutacak, ki
bu sıfırdır, ve sonra A'yı bire eşit olacak şekilde değiştireceğiz ve sonra B, A artı
yerine, B sıfır olan temp olacak.
Artı B'nin orijinali neyse, o da bir.
Bunun kafa karıştırıcı olabileceğini biliyorum.
Burada durup belki yazdırmak ve tam olarak ne olduğunu görmek isteyebilirsiniz, ancak umarım işlevimiz şimdi
çalışır.
Şimdi fib'de x için gibi bir şey yaparsam ve diyelim ki 100 verirsem.
Ve cevabı yazdıralım.
Bas o zaman.
X ve ben bunu çalıştırıyoruz.
Pekala, şuna bak.
Tüm Fibonacci sayılarımı aldım.
Çalıştır'a tıklarsam örnekte gördüğümüz gibi 20 yapalım.
4181 alıyorum.
Yani 19'dayım çünkü sayımımızın sıfırdan başladığını unutmayın.
Yani teknik olarak burada, eğer istersek, 21'i burada yapabiliriz, çalıştır'a tıklayabiliriz.
Ve altı, yedi, altı, beş aldığında, ki burada aldığımız şey bu.
Çok, çok havalı.
Ancak sayının nasıl dramatik bir şekilde arttığını görebilirsiniz.
1000'e çıktıkça.
Şimdi, bunu bir liste halinde yapsaydık, şöyle bir şey olurdu.
Burayı kopyalayalım.
Şimdi bir liste ile 52 buraya bir liste eklememiz gerektiği anlamına gelir.
Vermek yerine, sonuç nokta eklemesi yapacağız.
Ve başlangıç değeri olan a değeri ne ise onu ekleyeceğiz.
Sonra da daha önce yaptığımız şeyin aynısını yapacağız.
Yani ELT yerine, şimdi sadece bu listeye ekleme yapıyoruz ve sonunda sadece geri dönüyoruz.
Liste sonucu.
Şimdi, bunu döndürürsem, diyelim ki fib iki ve 100 veriyorum ve çalıştır'a tıklıyorum ve jeneratörle orijinal
olanı yorumlayalım.
Muhtemelen bunu basmalıyız, değil mi?
O zaman baskı yapalım.
Ve Çalıştır'a tıklayın.
Tamam.
Bu büyük bir liste.
Şimdi, eğer burada 1000 tane yaparsak.
Şunu görüyor musun?
Biraz zaman alıyor.
Ya 10,000 yaparsak?
Tamam.
Kesinlikle biraz zaman alıyor.
Ve burada bunun ne kadar sıkı çalıştığını görebilirsiniz.
Ne var biliyor musun?
Bunu durduracağım.
Ve jeneratörümüze geri dönelim.
Yol.
Ve burada 10,000 yapalım.
Bakalım jeneratörle 10.000 nasıl görünüyor.
Hâlâ çok çalışıyor ama bunların hiçbirini hafızamda tutmuyorum.
Teker teker alıyoruz ve teker teker yazdırarak bizim durumumuzda buna göre hareket edebilirim.
Bu yaygın bir mülakat sorusudur.
Aslında biraz gereksiz yere kafa karıştırıcı olduğunu düşünüyorum.
Ancak jeneratörlerin gücünü göstermektedir.
Bu videoyu birkaç kez izlemeniz gerekebilir, ancak umarım şu ana kadar aralıkları kullanma ve jeneratörleri
kullanarak performansı nasıl artırabileceğimiz konusunda biraz rahat hissediyorsunuzdur.
Bir sonrakinde görüşürüz.
Güle güle.