Girilen Sayı Fibonacci Dizisine Ait mi?

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² + 4 veya 5*n² - 4 ifadelerinden en az birinin tam kare olması gerekir.

Her ikisi içinde kod yapımız şu şekilde:

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.

Similar Posts

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir