Fibonacci sayısını uzun uzadıya anlatmayacağım. Fibonacci aslında bir sayı dizisi ve bize Altın Oran’ı veriyor.

Fibonacci dizisi şu şekilde ilerliyor: 1 1 2 3 5 8 13 21 55 …. bu böyle sonsuza kadar devam eder. Dikkat etmeniz gereken şey şudur. Son sayı kendinden önce gelen iki sayının toplamıdır. Aynı zamanda bir sayı kendinden önceki sayıya bölündüğü zaman 1,61..… gibi bir sayı elde ederiz buna Altın Oran denilir.
Ama konumuz şu: Python ile girilen bir sayının Fibonacci dizisine ait olup olmadığını ekrana yazdıran program.
İki mantığımız var:
- Diziyi sayıya kadar üretip kontrol etmek (basit ama büyük sayılar için yavaş olabilir).
- Matematiksel yöntem: Bir sayının Fibonacci olması için
5*n² + 4veya5*n² - 4ifadelerinden en az birinin tam kare olması gerekir.
Her ikisi içinde kod yapımız şu şekilde:
Konu İçindeki Başlıklar
gizle
Diziyi Sayıya Kadar Üretip Kontrol Etmek
Python
def fibonacci_kontrol(n):
# Negatif sayılar Fibonacci olamaz
if n < 0:
return False
a, b = 0, 1 # İlk iki Fibonacci sayısı
# Fibonacci sayıları n'den küçük olduğu sürece üretmeye devam et
while a < n:
a, b = b, a + b # bir sonraki Fibonacci sayısına geç
# Döngü bittiğinde a, n'ye eşit veya n'den büyüktür.
return a == n
# ----- ANA PROGRAM -----
sayi = int(input("Bir sayı girin: "))
if fibonacci_kontrol(sayi):
print(f"{sayi} bir Fibonacci sayısıdır.")
else:
print(f"{sayi} bir Fibonacci sayısı değildir.")Plaintext
# Kod Çıktısı 1
Bir sayı girin: 20
20 bir Fibonacci sayısı değildir.
# Kod Çıktısı 2
Bir sayı girin: 21
21 bir Fibonacci sayısıdır.Matematiksel Yöntem
Bu yöntem için math kütüphanesini kullanacağız.
Python
import math
def is_perfect_square(x):
"""Bir sayının tam kare olup olmadığını kontrol eder."""
s = int(math.isqrt(x))
return s * s == x
def is_fibonacci(n):
"""Verilen sayının Fibonacci dizisine ait olup olmadığını döndürür."""
if n < 0:
return False
# Fibonacci sayıları için karakteristik özellik:
# 5*n^2 + 4 veya 5*n^2 - 4 tam kare olmalıdır.
return is_perfect_square(5 * n * n + 4) or is_perfect_square(5 * n * n - 4)
# Örnek kullanım
sayi = int(input("Bir sayı girin: "))
if is_fibonacci(sayi):
print(f"{sayi} bir Fibonacci sayısıdır.")
else:
print(f"{sayi} bir Fibonacci sayısı değildir.")Plaintext
# Kod Çıktısı 1
Bir sayı girin: 55
55 bir Fibonacci sayısıdır.
# Kod Çıktısı 2
Bir sayı girin: 54
54 bir Fibonacci sayısı değildir.