Всі підпрограми в мові Паскаль (і функції, і процедури) є рекурсивними. Це означає, що всередині підпрограми можна звертатися до самої підпрограми. Однак, щоб таке звернення мало сенс, підпрограма повинна бути організована належним чином, тобто реалізувала б саме рекурсивний алгоритм. Наприклад, складемо функцію, яка обчислює суму елементів одновимірного масиву. Якщо використовувати відомий прийом накопичення суми, що передбачає обчислення суми в циклі, то така функція може мати наступний вигляд:
type mas = array [1..nn] of real;
if n = 1 then sum: = a [n]
При створенні непрямої рекурсії виникає проблема: як описати спричинюється процедуру. Як відомо, в Паскалі всі змінні, константи, мітки, процедури повинні бути описані до того, як будуть згадані в операторах або виразах, в іншому випадку компілятор оголосить їх імена невідомими. У непрямої рекурсії процедура "А" викликає процедуру "В", яка не описана. Вихід із ситуації в наступному: використовується випереджаюче опис за допомогою директиви FORWARD. Ця директива оголошує тільки заголовок викликається процедури, замінюючи собою тіло процедури, відкладаючи опис вмісту (розділу операторів) на подальше. Місцезнаходження розділу операторів вже не грає ролі, і в ньому можна не вказувати формальні параметри, а обмежитися лише ім'ям підпрограми: Procedure B (y: integer); FORWARD;
Тепер в процедурі "А" допустимо звернення до процедури "В", адже остання вже описана, точніше відомі її формальні параметри і компілятор може правильно організувати її виклик. Тема "Procedure B" перед текстом процедури "В" містить тільки ім'я процедури, тому що список формальних параметрів було вказано вище.
13 Завдання початкових значень змінним. Приклади використання в програмах для різних типів даних, що визначаються користувачем.
Ініціалізованих змінних в програмі можна змінювати, так само як і звичайні