Числа Фибоначчи

Первое и второе числа равны 1. Каждое последующее, начиная с третьего, есть сумма двух предшествующих: 1, 1, 2, 3, 5, 8,...

Листинг программы

Uses crt;

Var

n, i: integer;

A: array [1..100] of integer;

Function fib (n: integer): integer;

Begin

If (n = 1) and (n = 2) then fib:= 1

Else

fib:= fib (n- 1) + fib (n-2);

End;

Begin

Writeln (‘…’);

Readln (n);

For I:= 1 to n do Writeln (Fib (i));

End.

Рекурсивный вызов может быть косвенным. В этом случае подпрограмма обращается к себе опосредованно, путём вызова другой подпрограммы, в которой содержится обращение к первой.

Например:

Procedure A (i: Byte);

Begin

B(i);

End;

Procedure В (j: Byte);

Begin

A(j);

End;

Если строго следовать правилу, согласно которому каждый идентификатор перед употреблением должен быть описан, то такую программную конструкцию использовать нельзя. Для того чтобы такого рода вызовы стали возможны, вводится опережающее описание:

Procedure B (j: Byte); forward;

Procedure A (i: Byte);

Begin

B(i);

End;

Procedure B;

Begin

A(j);

End;

Итак, опережающее описание заключается в том, что объявляется лишь заголовок процедуры В, а её тело заменяется стандартной директивой FORWARD. Теперь в процедуре А можно использовать обращение к процедуре В - ведь она уже описана, точнее, известны её формальные параметры, и компилятор может правильным образом организовать её вызов. Обратим внимание на то, что тело процедуры В начинается заголовком, в котором уже не указываются описанные ранее формальные параметры.

Вопросы для самопроверки

1. Дайте определение рекурсии?

2. Какие существуют формы рекурсивных процедур?

3. Что означает косвенный рекурсивный вызов подпрограмм?

4. В чём заключается назначение опережающего описания рекурсивной подпрограммы?

Модули

Модуль – это автономно – компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции), и некоторые исполняемые операторы инициирующей части.

Компилятор Турбо Паскаля размещает программный код модулей в отдельном сегменте памяти. Максимальная длина сегмента не может превышать 64 Кбайт, однако, количество одновременно используемых модулей ограничивается лишь доступной памятью, что даёт возможность создавать весьма крупные программы.

Модули представляют собой прекрасный инструмент для разработки библиотек прикладных программ и мощное средство модульного программирования.

Модуль можно разделить на несколько разделов:

· Заголовок;

· Интерфейсная часть;

· Реализационная часть;

· Инициализационная часть.

Структура модуля


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: