Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

C++: Ciąg Fibonacciego i złota liczba

Ciąg Fibonacciego to sekwencja liczb, w której każda liczba (poza dwiema pierwszymi) jest sumą dwóch poprzednich. Rozpoczyna się od 0 i 1, a następne liczby tworzy się przez dodanie dwóch poprzedzających je liczb. 

  • 0 (pierwszy element ciągu)
  • 1 (drugi element)
  • 1 (0+1, trzeci element)
  • 2 (1+1, czwarty element)
  • 3 (1+2, piąty element)
  • 5 (2+3, szósty element)
  • 8 (3+5, siódmy element)
  • 13 (5+8, ósmy element)
  • 21 (8+13, dziewiąty element)
  • 34 (13+21, dziesiąty element)
  • i tak dalej...

 

Historia ciągu

Nazwa "ciąg Fibonacciego" pochodzi od Leonarda z Pizy, znanego jako Fibonacci, który opisał tę sekwencję w swojej książce "Liber Abaci" z 1202 roku. Fibonacci przedstawił ciąg jako rozwiązanie problemu rozmnażania się królików. Mimo, że idea ciągu była znana w matematyce indyjskiej już wcześniej, to Fibonacci przyczynił się do jej popularyzacji w świecie zachodnim.

 

Związek z złotą liczbą

Ciąg Fibonacciego ma fascynujący związek ze "złotą liczbą" czyli phi (φ), określoną jako (1 + √5) / 2, która wynosi około 1.61803398875. Stosunek kolejnych liczb w ciągu Fibonacciego, jak się okazuje, zbliża się do złotej liczby. Im dalej w ciągu, tym stosunek dwóch kolejnych liczb Fibonacciego jest bliższy wartości phi. To odkrycie ma szerokie zastosowania w sztuce, architekturze, przyrodzie i finansach, gdzie złota liczba często pojawia się jako symbol harmonii i estetycznego piękna.

 

Przykładowa implementacja w C++

 

Wersja rekurencyjna

W metodzie rekurencyjnej obliczanie ciągu Fibonacciego polega na wywoływaniu funkcji, która odwołuje się do samej siebie. Każdy element ciągu jest sumą dwóch poprzednich elementów.

int fibonacciRekurencyjnie(int n) {
    if (n <= 1) 
        return n;
    return fibonacciRekurencyjnie(n - 1) + fibonacciRekurencyjnie(n - 2);
}

W powyższym przykładzie, jeśli n jest mniejsze lub równe 1, funkcja zwraca n, co odpowiada dwóm pierwszym liczbom ciągu (0 i 1). W przeciwnym wypadku, funkcja wywołuje siebie samej dla dwóch poprzednich liczb (n-1 i n-2) i zwraca ich sumę.

 

Wersja iteracyjna

Iteracyjne podejście do ciągu Fibonacciego polega na sekwencyjnym obliczaniu wartości ciągu w pętli.

int fibonacciIteracyjnie(int n) {
    int a = 0, b = 1, c;
    if (n == 0)
        return a;
    for (int i = 2; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    return b;
}

W tym kodzie, dla n równego 0 zwracana jest wartość 0. W pętli for, sumowane są dwie poprzednie wartości (a i b), a następnie wartości są przesuwane: a przyjmuje wartość b, a b - wartość c. W ten sposób, każdy kolejny element ciągu jest obliczany i przechowywany w zmiennej b, która jest zwracana po zakończeniu pętli.

Obie metody mają swoje zalety i wady. Metoda rekurencyjna jest bardziej zwięzła i bliższa matematycznej definicji ciągu, jednak może być mniej wydajna ze względu na wielokrotne wywołania funkcji, szczególnie dla dużych wartości n. Z kolei metoda iteracyjna jest zazwyczaj szybsza i bardziej efektywna pod względem zużycia pamięci, ale jest nieco bardziej skomplikowana.

 

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się