Merhabalar,
Fibonacci serileriyle alakalı alternatif bir yöntemden bahsedeyim.
Bu serisinin fonksiyonel ifadesini Jacques Philippe Marie Binet
1843’te şöyle vermiş:
Fibonacci serisinde n. sırada yer alan sayı, altın oranın köklerinin n. kuvvetlerinin farkının, köklerin kendilerinin farkına olan bölümüne eşittir.
Yani, altın oran (Φ
) diye bir irrasyonel sayı ve bu irrasyonel sayının x1
ve x2
diye iki tane kökü var. Bu kökleri bulup, istenen fonksiyonu f(n) = (x1 ** n - x2 ** n) / (x1 - x2)
cinsinden yazıp, n.
sırada yer alan fibonacci sayısını bulabiliriz.
Altın oran ne diyordu bize?
a > b > 0
durumunda; a
'nın b
'ye olan oranı, a+b
'nin a
'ya olan oranına eşitse, a
ve b
arasında altın oran vardır. Yani;
Φ = a/b = (a+b)/a
Yukardaki formüldeki (a+b)/a
ifadesini açacak olsak, şöyle yazamaz mıydık?
(a/a) + (b/a)
a/a
da 1
'e eşit olur bu durumda. Formül de şöyle değişmez mi?
Φ = a/b = 1+b/a
Madem a/b
, altın orana eşit o halde b/a
için 1/Φ
yazıp formülü yeniden düzenleyelim:
Φ = 1 + 1/Φ
İşte bir denklem elde ettik. Bu denklemi biraz daha değiştiriyorum.
Φ ** 2 - Φ - 1 = 0
Evet, lise zamanlarından aşina olduğumuz bir denkleme benzettik.
Hatırlarsanız, bir denklemin köklerini bulmak için deltayı (Δ
) bulmamız lazımdı. Δ
'nın formülünü hatırlayalım:
ax^2 + bx + c = 0
denklemi için Δ
:
delta = b ** 2 - 4 * a * c
Bir denklemin kökleri nasıl bulunuyordu hatırlayalım:
x1 = (-b + delta ** 0.5) / (2 * a)
x2 = (-b - delta ** 0.5) / (2 * a)
Son elde ettiğimiz denklem şuydu: Φ ** 2 - Φ - 1 = 0
. Bu ifadedeki a
, b
ve c
değerleri şöyledir:
a = 1, b = -1, c=-1
.
Bu değerleri yerlerine koyarsanız kökler şu sayılara eşit oluyor. x1 = ((1 + 5 ** 0.5) / 2)
ve x2 = ((1 - 5 ** 0.5) / 2)
.
Yukardaki ifadeleri hesaplayacak olursak, x1
'in 1.618033988749895...
sayısına, x2
'nin de -0.6180339887498949...
sayısına eşit olduğunu buluruz.
O halde f(n)
fonksiyonunu yeniden düzenleyelim:
f(n) = (x1 ** n - x2 ** n) / (x1 - x2)
fonksiyonunda yer alan x1
ve x2
parametreleri yerine yeni bulduğumuz değerleri yazarsak, formül şu hale gelir.
f(n) = (((1 + 5 ** 0.5) / 2) ** n - ((1 - 5 ** 0.5) / 2) ** n) / (((1 + 5 ** 0.5) / 2) - ((1 - 5 ** 0.5) / 2))
Bu ifadenin Python dilindeki karşılığı aşağıdaki gibidir:
def nth_fib(n): return (x1 ** n - x2 ** n) / (x1 - x2) if (x1 := (1 + 5 ** 0.5) / 2, x2 := (1 - 5 ** 0.5) / 2) else 0
print(nth_fib(2) / nth_fib(1))
print(nth_fib(3) / nth_fib(2))
print(nth_fib(4) / nth_fib(3))
print(nth_fib(5) / nth_fib(4))
print(nth_fib(100) / nth_fib(99))
print(nth_fib(1000) / nth_fib(999))
İyi çalışmalar.