Fibonacciho čísla v jazyce Python

Fibonacciho Cisla V Jazyce Python



„Pokud se k 1 přidá 0, odpověď bude 1. Pokud se sečte odpověď 1 a dodatek (nikoli augend), nová odpověď bude 2. Pokud se tato nová odpověď a její součet sečtou, odpověď by bylo 3. Pokud se tato nová odpověď a její dodatek sečtou, odpověď by byla 5.“

Fibonacciho čísla jsou zvláštní posloupnost, kde první hodnota je předem deklarována jako 0 a druhá hodnota je předem deklarována jako 1. Zbývající čísla jsou vytvořena z těchto dvou sečtením předchozích dvou čísel. Všechna Fibonacciho čísla jsou kladná celá čísla, začínající od 0. Prvních dvanáct Fibonacciho čísel a způsob jejich získání jsou následující:

0
1
1 + 0 = 1
1 + 1 = 2
2 + 1 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
13 + 8 = 21
21 + 13 = 34
34 + 21 = 55
55 + 34 = 89







Bez součtových výrazů lze tato Fibonacciho čísla vložit do tabulky takto:



0 1 1 dva 3 5 8 13 dvacet jedna 3. 4 55 89
0 1 dva 3 4 5 6 7 8 9 10 jedenáct

První řádek obsahuje Fibonacciho čísla. Druhý řádek má indexy založené na nule za předpokladu, že Fibonacciho čísla jsou v poli.



Fibonacciho čísla lze vytvořit v čase O(n) a v čase O(1). V těchto výrazech časové složitosti n znamená n hlavních operací a 1 znamená 1 hlavní operaci. S O(n) se vytvoří n Fibonacciho čísel počínaje 0. S O(1) se z odpovídajícího indexu vytvoří jedno Fibonacciho číslo. To je důvod, proč to vyžaduje pouze jednu hlavní operaci místo n hlavních operací.





Cílem tohoto článku je vysvětlit, jak vytvářet Fibonacciho čísla v obou směrech pomocí Pythonu.

Vzorec pro Fibonacciho číslo

Formální definice Fibonacciho čísla je:



kde F n je Fibonacciho číslo na n

Vytváření Fibonacciho čísel v O(n) čase

Pokud n je 1, pak se jako Fibonacciho číslo vytiskne pouze 0. Pokud n je 2, pak 0 a 1 budou vytištěny jako Fibonacciho čísla v tomto pořadí. Pokud n je 3, pak 0, 1 a 1 budou vytištěny jako Fibonacciho čísla v tomto pořadí. Pokud n je 4, pak 0, 1, 1 a 2 budou vytištěny jako Fibonacciho čísla v tomto pořadí. Pokud n je 5, pak 0, 1, 1, 2 a 3 budou vytištěny jako Fibonacciho čísla v tomto pořadí. Pokud n je 6, pak 0, 1, 1, 2, 3 a 5 budou vytištěny jako Fibonacciho čísla v tomto pořadí – a tak dále.

Funkce Pythonu pro vytvoření prvních n Fibonacciho čísel je:

def Fibonacci ( n ) :
arr = [ 0 ] * ( n )
arr [ 1 ] = 1
pro i v rozsah ( dva , n ) :
arr [ i ] = arr [ já - 1 ] + příl [ já - dva ]
vrátit se arr

Začíná vytvořením pole n prvků, všechny inicializované na nuly. Toto pole bude obsahovat Fibonacciho čísla. První Fibonacciho číslo, 0, již existuje. Druhé Fibonacciho číslo, 1, je přiřazeno dalším příkazem (ve funkci). Pak je tu smyčka for, která začíná od indexu 2 těsně před n. Má prohlášení:

arr [ i ] = arr [ já - 1 ] + příl [ já - dva ]

Tím se přidají bezprostředně předchozí dvě čísla.

Kód pro volání funkce a tisk prvních dvanácti Fibonacciho čísel může být:

N = 12
A = Fibonacci(N)
pro i v rozsahu (N):
tisknout (A[i], end=' ‘)
tisk()

Výstup je:

0 1 1 dva 3 5 8 13 dvacet jedna 3. 4 55 89

Vytváření jednoho Fibonacciho čísla v konstantním čase

Existuje matematický vzorec, který dává do vztahu index založený na nule a odpovídající Fibonacciho číslo. Vzorec je:

Všimněte si, že na pravé straně rovnice to není druhá odmocnina z 5, která je umocněna n; právě výraz v závorce je umocněn n. Existují dva takové výrazy.

Pokud n je 0, Fibn by bylo 0. Pokud n je 1, Fib n by bylo 1. Pokud n je 2, Fib n by bylo 1. Pokud n je 3, Fib n by bylo 2. Pokud n je 4, Fib n bude 3 – a tak dále. Čtenář si může tento vzorec ověřit matematicky dosazením různých hodnot za n a vyhodnocením. n je v tomto vzorci index založený na nule.

Kód Pythonu pro tento vzorec je:

importovat matematiku

def fibNo ( n ) :
FibN = ( ( ( 1 +math.sqrt ( 5 ) ) / dva ) ** n - ( ( 1 -math.sqrt ( 5 ) ) / dva ) ** n ) / math.sqrt ( 5 )
vrátit se FibN

Matematický modul byl importován. Má funkci druhé odmocniny. Operátor ** se používá pro napájení. Funkce fibNo() implementuje vzorec přímo. Vhodné volání a tisk funkce fibNo() je:

N = 11
vpravo = fibNo (N)
tisknout (ret)

Výstup je:

89,0000000000003

Z odpovědi je možné odstranit nepotřebné desetinné číslice. To je však diskuse na jindy.

Pokud jsou pro různé n indexy vyžadována různá Fibonacciho čísla, musí být funkce fibNo() volána jednou pro každý z n indexů, aby se vrátila různá odpovídající Fibonacciho čísla. Následující program to dělá pro indexy založené na nule, 7 až 9 (včetně):

importovat matematiku

def fibNo ( n ) :
FibN = ( ( ( 1 +math.sqrt ( 5 ) ) / dva ) ** n - ( ( 1 -math.sqrt ( 5 ) ) / dva ) ** n ) / math.sqrt ( 5 )
vrátit se FibN

pro i v rozsah ( 7 , 10 ) :
tisk ( fibNo ( i ) , konec = ' ' )
tisk ( )

Výstup je:

13 00000000000002 21 00000000000004 34 0000000000001

Všimněte si způsobu, jakým byla for-loop kódována v Pythonu. První index je 7. Další index je 8 a poslední index je 9. 10 v argumentu rozsahu je 9 + 1. Hodnota na pozici 10 musí být posledním indexem založeným na nule plus 1. První argument, 7, je počáteční index založený na nule.

Závěr

Fibonacciho čísla jsou zvláštní posloupnost celých čísel (kladných celých čísel). Začíná 0, následuje 1 bezpodmínečně. Zbývající čísla se odtud vyvinou přidáním bezprostředně předchozích dvou čísel.

Chcete-li získat prvních n Fibonacciho čísel, přijměte 0 a 1 jako první dvě, pak pro zbytek použijte for-loop s příkazem jako:

arr [ i ] = arr [ já - 1 ] + příl [ já - dva ]

který sčítá bezprostředně předchozí dvě čísla.

Chcete-li získat pouze jedno Fibonacciho číslo z indexu n založeného na nule, použijte vzorec: