Funkcja (FUNCTION), jest rodzajem procedury, która po
wywołaniu zwraca obliczoną przez siebie wartość (typu
prostego lub wskaźnikowego) pod swoją nazwą.
Wartość funkcji traktowana jest jak wyrażenie, może więc
być elementem wyrażeń, argumentem innych funkcji,
procedur itp. Związane jest to właśnie z faktem
zwracania wartości funkcji pod jej nazwą.
FUNCTION Nazwa_funkcji(Lista_parametrów): Typ_wyniku; ...Część_opisowa BEGIN ...Ciąg_instrukcji END;Typ wyniku określa typ zmiennej jaki ma być przypisany danej funkcji.
Nazwa_Funkcji:=Wyrażenie;lub
Nazwa_Funkcji:=Wartość;w przeciwnym wypadku funkcji nie zostanie przypisana żadna wartość.
Nazwa_Funkcji(Lista_parametrów);lub
Zmienna:=Nazwa_Funkcji(Lista_parametrów);
FUNCTION Silnia (n : Integer) : Extended; Var i : Integer; Wynik : Extended; Begin Wynik:=1; For i:=1 To n Do Wynik:=Wynik*i; Silnia:=Wynik; End;lub innaczej :
FUNCTION Silnia (n : Integer) : Extended; Begin If n=1 Then Silnia:=1 Else Silnia:=n*Silnia(n-1); End;Drugi sposób wykorzystuje tzw. Rekurencję czyli wywoływanie procedury (funkcji) przez siebie samą. Rozwiązanie takie ma zastosowanie gdy wykonywane czynności powtarzają się i nie zna się liczby tych powtórzeń. Rekurencja pozwala na proste i eleganckie rozwiązanie wielu problemów, czego przykładem jest obliczanie silni. Jednak pod pozorną prostotą maskuje się nieraz ogromny nakład obliczeniowy, związany z wielokrotnym wywoływaniem procedury. Zagrożenie kryje się tutaj w fakcie, że nakładu tego po prostu nie widać a każde wywołanie procedury umieszcza dane na stosie, który ma ograniczoną pojemność.