Liczby Perrinego to w matematyce liczby opisywane następującym wzorem rekurencyjnym:
P(n) = P(n - 2) + P(n - 3), n > 2
Początkowe wartości to: P(0) = 3, P(1) = 0, P(2) = 2.
Liczby Perrinego służą do określania maksymalnej liczby zbiorów niezależnych w n elementowym grafie cyklicznym dla wartości n większych od 1.
Liczby Perrinego można ustawić w ciąg: 3, 0, 2, 3, 2, 5, 5, 7, 10, 12, ...
Wyznaczanie kolejnych liczb jest bardzo podobne do wyznaczania ciągu Fibonacciego ze względu na zależność rekurencyjną. Należy pamiętać, że rozwiązanie rekurencyjne jest proste w zapisie, ale nie tak efektywne jak wersja iteracyjna algorytmu.
Zapis rekurenycjny algorytmu zajmuje zaledwie kilka linijek i jest bardzo podobne do zapisu matematycznego. Warto zwrócić uwagę, że indeks wymienionych pierwszych wartości wzoru zaczyna się od zera.
(1.) Napisana funkcja zwraca n-tą liczbę Perrinego. Wyszczególnione zostały w niej (2. - 7.) przypadki trzech pierwszych wyrazów oraz (8.) wzór rekurencyjny służący do wyliczania kolejnych wartości ciągu.
Rozwiązanie rekurencyjne nie jest zby efektywne, ponieważ ten sam wyraz może być wyliczany kilk razy. Lepszym rozwiązaniem jest wersja iteracyjny, która tworzy tymczasową tablicę trzech liczb i operuje na niej, aby wyliczyć kolejne wyrazy. Poniżej znajduje się kod wykorzystujący te założenia:
(2. - 5.) Inicjalizacja tablicy dynamicznej z początkowymi wartościami. Pierwszy wyraz na tablicy jest wyrazem o najniższym indeksie. (6.) Deklaracja zmiennej używanej jako kontener na wyliczany kolejny wyraz. (7.) Dopóki wartość n > 2, czyli dopóki na liście nie ma szukanego wyrazu to: (8.) wylicz nowy wyraz, (9. - 10.) przesuń dwa pierwsze wyrazy o jedno miejsce do tyłu i (11.) umieść na tablicy nowy wyraz. Na koniec każdej iteracji (12.) zmniejsz wartość zmiennej n. Po zakończeniu pętli (14.) pobierz odpowiednią wartość, (15.) usuń tablicę i (16.) zwróć wyliczoną wartość.
W celu wypisania pierwszych dziesięciu liczb Perrinego wystarczy poniższy kod:
Napisz funkcją int sumaLiczbPerrinego(int k), która zsumuje pierwsze k liczb Perrinego. W rozwiązaniu nie używaj tablicy dynamicznej.
Przykładowo dla parametru k = 5 program wypisze 10.