Kod Örnekleri – Fibonacci Serisi

0 121

Fibonacci Serisi orta çağın en yetenekli matematikçisi olarak kabul edilen İtalyan Leonardo Fibonacci tarafından ilk defa dillendirilen ve onun ismiyle anılan bir sayı serisidir. Yazdığı kitapta bu serisinin problemlerin çözümünde kullanabileceğini anlatmaktadır.

Fibonacci serisinde her rakam, kendisinden önce gelen iki rakamın toplamıdır. 1 ve 2 ile başlayan serinin ilk 10 rakamı 1,2,3,5,8,13,21,34,55,89… olan bu seri sonsuz kadar gider. Programcılığa yeni başlayanlar için bu seriyi bilgisayara yazdırmak ilk programlama örneklerinden biridir.

Fibonacci serisinin kullanıcının istediği rakama kadar olan kısmını ekrana yazdıran python kodunu yazalım :

#Fibonacci dizisi hangi terimine kadar yazdırılsın onu giriyoruz.
toplamsayi = int(input("Terim sayısı giriniz: "))
#Burada ilk 2 değeri girdik.Yani 0 ve 1'i manuel ekledik.
a1 = 0
a2 = 1
saydir = 0
#Burada ilk girdiğimiz değeri kontrol ettiriyoruz.Eğer 0'dan küçük sayı girdiksek program hata verecektir.
if toplamsayi <= 0:
    print("Lütfen pozitif bir sayı giriniz.")
elif toplamsayi == 1:
    print("Fibonacci dizisi girdiğiniz",toplamsayi,"değerine kadar :")
    print(a1)
else:
    print("Fibonacci dizisi girdiğiniz",toplamsayi,"değerine kadar :")
while saydir < toplamsayi:
    print(a1,end=' , ')
    aa1 = a1 + a2
    #Burada değerleri yeniliyoruz.Yani bir önceki sayıyı bir sonrakine ekledik ve yer değiştirdik.
    a1 = a2
    a2 = aa1
    saydir += 1

Bu yöntem ile istediğimiz kadar fibonacci serisini ekrana yazdırabilirsiniz.

Şimdide fibonacci serisindeki elemanları toplayan kodu yazalım.

ef fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)
x=int(input('Serinin kaç rakamını toplamak istersiniz? '))
print (fib(x))

Yukarıdaki kodu çalıştırdığımızda bizden kaça kadar olan fibonacci serisi sayılarını toplamak istediğimiz soruyor ve girdiğimiz değere kadar olanları topluyor. Program çalışıyor ancak büyük bir problem var. Rekursif olarak çalışan bu programa biraz büyük bir değer girildiğinde aşırı yavaş çalıştığını göreceksiniz. ilk 50 değerin topla dersek dahi dakikalarca sizi bekletecektir.

Daha önce başka bir kod örneğinde de bahsettiğimiz Project Eular isimli matematik problemlerini kodlamayla çömenizi isteyen sitede 2. soru fibonacci serisi ile alakalı.

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Türkçesi :Fibonacci serisinde her rakam, kendisinden önce gelen iki rakamın toplamıdır. 1 ve 2 ile başlayan serinin ilk 10 rakamı:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

Bu serinin 4.000.000 (Dört Milyon) ‘dan küçük tüm çift rakamlarının toplamını bulunuz.

Şimdi bu sorunun çözümüne odaklanalım. Yukarıdaki yolla bu problemi çözemeyiz. Programımızın saatlerce çalışması lazım. 4 milyonuncu fibonacci serisini bile bulmak yukarıda yazdığımız yolla çok zordur. Farklı bir yaklaşımla yazılmış kodlara bakarsak aslında problemin çok zor olmadığını anlarız.

#1 1 2 3 5 8 13
#Fibonacci dizisini n nci terime kadar görüntüleyen program, burada n kullanıcı tarafından sağlanır


# farklı bir sonuç için bu değeri değiştirin
nterms = 34

# eğer terimi kullanıcının belirlemesini isterseniz alttaki satırın başındaki # işareti kaldırın
#nterms = int(input("Kaç terime kadar? "))

# İlk iki terim
n1 = 0
n2 = 1
count = 0
toplam =0

# Buraa girilen terimin geçerli olupğ oladığını kontrol ediyoruz.
if nterms <= 0:
   print("Please enter a positive integer")
elif nterms == 1:
   print("Fibonacci sequence upto",nterms,":")
   print(n1)
else:
   print("Fibonacci sequence upto",nterms,":")
   while count < nterms:
       print(n1,end=' , ')
       if(n1%2==0):
           toplam =toplam + n1
       nth = n1 + n2
       # değeri güncelliyoruz
       n1 = n2
       n2 = nth
       count += 1

print("toplam . " ,toplam)

Bu kod sayesinde problemimizi çok kısa bir sürede çözebiliyoruz.

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku