Liczby Wielokątne to takie liczby, które można przedstawić w postaci foremnych figur geometrycznych. Liczby Wielokątne to uogólnienie na dowolną figurę o n ścianach. Kolejne liczby opisują ile należy dołożyć równomiernie rozłożonych punktów do aktualnej figury, a by powstała kolejna identyczna o większym rozmiarze.
Najprostszym przykładem liczb Wielokątnych są liczby Trójkątne. W tym szczególne przypadku ciag opisuje ile należy kolejno dołączać punktów, aby powstawały coraz większe trójkąty. Poniżej znajduje się interpretacja graficzna:
Początkowo mamy zdegenorowaną figurę w postaci punktu, więc a1 = 1. Następnie dokładamy dwa kolejne punkty, aby utworzyć kolejne, większy trójkąt. Jak można zauważyć powstaje ciąg liczb 1, 2, 3, 4, 5, 6... W tym przypadku wzór na ilość punktów do dołożenia w n-tym ruchu jest następujący an = n.
Innym przykładem są liczby Kwadratowe. Jest to utożsamienie operacji potęgowanie do kwadratu tj. x2 z figurą geometryczną kwadrat. W tym przypadku powstawanie kolejnych takich liczb jest następujący:
Ponownie na początku jest tylko punkt, ale następnie dokładamu 3, 5, 7, .. punktów, aby uzyskać coraz to większy kwadrat. W tym przypadku an = n2.
Na podstawie podanych przykładów można podać ogólną metodę na wyznaczenie n-tego wyrazu o k bokach. Oznaczmy to poprzez ak, n. Rekurenycjny wzór jest następujący:
ak, 1 = 1
ak, n = ak, n - 1 + (k - 2) dla n > 1
Jednak najszybszą metodą obliczenia wyrazu będzie ak, n = nk / k!
Poniżej została przedstawiona wersja rekurencyjna programu do obliczania ak, n.
Tego typu implementacja pozwoli na wyliczenia dowolnego wyrazu dla liczby o dowolnym stopniu złożności k. Jednak tego typu metoda nie jest zbyt efektywna w przypadku, gdy trzeba wypisać ciąg liczb Wielokątnych określonego stopnia.
Napisaną funkcję można przetestować przy pomocy poniższego fragmentu kodu:
Najbardziej efektywnym sposobem wypisania kolejnych liczb Wielokątnych dowolnego stopnia będzie zastosowania iteracji. Zamiast ponownie wyliczać wyraz to będzie on wyliczany na podstawie poprzedniego wiersza. Uprości to potrzebne operacje do minimum.
Na początku funkcji wypiszLiczbyWielokatne() ustalamy, (2.) który wyraz wypisujemy oraz (3.) jego wartość.
Napisaną funkcję można przetestować przy pomocy poniższego fragmentu kodu:
Napisz program, który będzie wypisywać ile liczb począwszy od pewnego indeksu i. Wskazówka: Skorzystaj z funkcji wypiszLiczbyWielokatne() oraz liczbaWielokatna(). Przykładowo, gdy ile = 4 to kolejne liczby wielokątne dla k = 4 począwszy od = 3 to:
Napisz program, który będzie sumować wszystkie wyrazy o indeksach z zakresu [a, b] podanych przez użytkownika. Przykładowo dla k = 3 i zakresu [a = 2, b = 4] program ma zwrócić 9 (= 2 + 3 + 4).