Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Рекурсия

...

Begin

Begin

Var

...

Type

Const

End.

Begin

Var

Type

Const

Пример

Массив – упорядоченная совокупность данных одного типа.

Массивы

Var

Type

Const

Const

Var

v1: 22 .. 44;

v2: MyType01;

v3: MyType01 = 6;

MyConst11 = 1; MyConst12 = 7;

MyType02 = MyConst11 .. MyConst12;

MyVar02: MyType02;

 

Замечание. Тип–Диапазон – порядковый тип.

 

Все типы переменных, изученные до сих пор – скалярные (простые) типы.

Массив – вектор, матрица,...

Массив – переменная с индексом (со списком индексов).

 

<Объявление одномерного массива> :: =

<Имя переменной>: array [<Диапазон>] of <Тип элемента>;

 

<Объявление нескольких многомерных массивов> :: =

<Список имён >: array [<Список диапазонов>] of <Тип элемента>;

или

<Список имён >: <Тип-массив>;

 

<Тип-массив> :: =

array [<Список диапазонов>] of <Тип элемента >;

 

<Обращение к элементу массива> :: =

<имя массива> [ <Список значений индексов> ]

 


 

MyConst21 = 1; MyConst22 = 8;

MyRange1 = 1 .. 7;

MyRange2 = MyConst21 .. MyConst22;

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

A1, A2, A3: array [1 .. 4, -1 .. 7] of double;

A4: array [MyRange1] of double;

A5: array [MyRange1, MyRange2] of double;

A[3]:= 99;

A1[2, 6]:= 5.3;

A2[1][7]:= 4.1e-10;

A3[5, 0]:= 2;


Пример. Заполнить матрицу числами, составляющими треугольник Паскаля.

, . , .

 

n=16;

MyArrayType = array [0 .. n, 0 .. n] of integer;


procedure PT(var mG: MyArrayType);

// procedure PT(var mG: array [0 .. n, 0 .. n] of integer);

m, k: integer;

for m:= 0 to n do for k:= 0 to n do mG[m, k]:= 0;

 

mG[0, 0]:= 1;

for m:= 1 to n do

mG[m, 0]:= 1; mG[m, m]:= 1;

for k:= 1 to m-1 do mG[m, k]:= mG[m-1, k] + mG[m-1, k-1];

end;

end;

 


 

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

Если задача сводится к себе, и еще раз к себе, и так далее, то количество обращений к себе должно быть конечным.

Каждое очередное сведение задачи к себе должно приближать задачу к тривиальному случаю. В тривиальном случае задача решается по алгоритму, который более не сводит задачу к себе.

Рекурсия используется во множестве стандартных алгоритмов. Далее, в курсе лекций, тема «Рекурсивные алгоритмы» будет возобновляться многократно.


Пример.

 

Применяя сведение задачи к себе n раз, можно «дойти» до тривиального случая – до значения 0!, а оно равно 1.

 

Пример 2.

 

Применение такого сведения задачи к себе приводит к «зацикливанию».


Числа Фибоначчи выражаются сами через себя при , но выражаются явно (дают тривиальный случай) при и :

 

, , , .

, – Golden Ratio.

 

Сумма убывающей геометрической прогрессии

, ,

есть функциональный (а именно, степенной, по степеням переменной ) ряд с коэффициентами 1, 1, ….


Полиномы Фибоначчи являются коэффициентами разложения в степенной ряд функции

, .

Полиномы Фибоначчи выражаются «сами через себя» при , но выражаются явно (дают тривиальный случай) при и :

 

, ,

Связь с числами Фибоначчи:

TEX (Дональд Кнут)

Пример рекурсивной функции

 

function Fib(n: integer; x: double): double;

<== предыдущая лекция | следующая лекция ==>
Диапазон | Рекурсивные алгоритмы
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 268; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.