Ciąg (liczby) Fibonacciego - P

advertisement
Ciąg Fibonacciego to szczególny rodzaj ciągu liczb naturalnych. Liczby tego ciągu
nazywane są liczbami Fibonacciego. Spotykane są w wielu dziedzinach i sytuacjach np. w
matematyce, w przyrodzie, na rynkach giełdowych oraz na maturze z informatyki! Ciąg
Fibonacciego można określić rekurencyjnie – dlatego jest często wykorzystywanych we
wszelkich zadaniach informatycznych.
Definicja liczb Fibonacciego
Rekurencyjne opisanie ciągu Fibonacciego:
Ciąg Fibonacciego to ciąg liczb, w którym pierwszy wyraz jest równy , drugi jest równy 1 a
każdy następny jest sumą dwóch poprzednich.
Istnieje pewna nieścisłość zależnie od przyjętych wytycznych. W jednym z zadań na
egzaminie maturalnych z informatyki, ciąg rozpoczynał się od cyfry 1. Różni autorzy
mają różne zadanie na ten temat. Dostając wzór do zadania, zwróć uwagę na jego
parametry.
Obliczając n-ty wyraz ciągu, musisz posługiwać się wartościami poprzednimi czyli n-1, n-2
itd. aż dojdziesz do wartości które znasz. Są nimi wartości dla F0 i F1.
Obliczymy wartość 4 wyrazu ciągu Fibonacciego, wynosi ona:
Jest to nasza wartość dla 4 wyrazu ciągu. Zapisujemy ją lub zapamiętujemy. Wzór
rekurencyjny nie dostarcza nam informacji o elemencie F3 i F2 więc musimy ponownie
rozpisać te wyrazy posługując się wzorem na n:
Zgodnie z obliczeniami wartość dla F2 wynosi 1. Dzięki temu możemy obliczyć wartość dla
Karol Trybulec | p-programowanie.pl | 1
F3 i F4:
Ostatecznie 4 wyraz ciągu liczb Fibonacciego wynosi 3.
Obliczanie n-tego wyrazu ciągu Fibonacciego C++ (rekurencyjnie)
Za pomocą poniższego kodu możemy wyznaczyć dowolny n-ty wyraz ciągu Fibonacciego.
Jest to sposób rekurencyjny, ponieważ zawiera rekurencyjne wywołanie funkcji fib().
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstdlib>
using namespace std;
unsigned int fib(int n)
{
if(n == ) return ;
if(n == 1) return 1;
return fib(n-1)+fib(n-2);
}
int main()
{
int n;
cout << "Podaj numer wyrazu ciagu fibonacciego do obliczenia:" << endl;
cin >> n;
cout << fib(n) << endl;
system("PAUSE");
return();
}
Obliczanie n-tego wyrazu ciągu Fibonacciego C++ (iteracyjnie)
Obliczanie n-tego wyrazu ciągu fibonacciego iteracyjne jest trudniejsze, i mniej optymalne w
porównaniu do metody rekurencyjnej.
Karol Trybulec | p-programowanie.pl | 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cstdlib>
using namespace std;
unsigned int fib(int n)
{
int a, b;
if(n == ) return ;
a = ; b = 1;
for(int i=; i < (n-1); i++)
{
swap(a, b);
b += a;
}
return b;
}
int main()
{
int n;
cout << "Podaj wyraz ciagu fibonacciego do obliczenia:" << endl;
cin >> n;
cout << fib(n) << endl;
system("PAUSE");
return();
}
Wypisywanie n wyrazów ciągu Fibonacciego
Korzystając ponownie ze wzoru rekurencyjnego możemy w łatwy sposób wypisać na ekran
dowolną ilość liczb ciągu fibonacciego. Wystarczy wywołać funkcję w pętli odpowiednią ilość
razy i wyświetlać na ekran wartości zwracane:
Karol Trybulec | p-programowanie.pl | 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstdlib>
using namespace std;
unsigned int fib(int n)
{
if(n == ) return ;
if(n == 1) return 1;
return fib(n-1)+fib(n-2);
}
int main()
{
int ilosc;
cout << "Podaj ile wyrazow wypisac:" << endl;
cin >> ilosc;
for (int i = ; i<=ilosc; i++)
cout << fib(i) << ", ";
system("PAUSE >nul");
return();
}
Uwaga! Należy zwrócić uwagę na treść zadania. Pierwszym wyrazem ciągu Fibonacciego
może być 0 lub 1. Jeżeli masz wypisać 10 wyrazów wypisujesz wyrazy od F1 do F10.
Natomiast jeżeli w zadaniu ciąg zaczyna się od cyfry 0, wtedy traktujemy 0 jako pierwszy
wyraz. Wypisując 10 wyrazów wypisujemy od wyrazy od F0 do F9. Tak jak pisałem wcześniej
jest to kwestia umowna.
Karol Trybulec | p-programowanie.pl | 4
Download