мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
pascal:recur [09/11/2012 14:21] – oca | pascal:recur [16/11/2012 14:23] (текущий) – oca | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
===== Рекурсия и рекуррентные соотношения ===== | ===== Рекурсия и рекуррентные соотношения ===== | ||
+ | |||
+ | |||
+ | |||
+ | |||
==== Рекуррентные соотношения ==== | ==== Рекуррентные соотношения ==== | ||
+ | Согласно [[http:// | ||
+ | |||
+ | Короче говоря, | ||
+ | |||
+ | A[0] = A; | ||
+ | |||
+ | A[i] = F(A [i-1]), | ||
+ | |||
+ | где A[0] задаётся отдельно, | ||
+ | |||
+ | Внимание! Иногда рекуррентные соотношения рассматриваются в расширенном виде A[i] = F(A[0], A[1] ... A[i-1]), т.е. для определения очередного элемента последовательности используются все или несколько предыдущих элементов последовательности. Пример - числа Фибоначчи, | ||
+ | |||
+ | A[0] = A[1] = 1; | ||
+ | |||
+ | A[i] = A[i-1] + A[i-2]; | ||
+ | |||
+ | |||
+ | Также " | ||
+ | |||
+ | **Ссылки по теме** | ||
+ | |||
+ | [[http:// | ||
+ | intuit: Комбинаторные алгоритмы для программистов 7. Лекция: | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
==== Рекурсия ==== | ==== Рекурсия ==== | ||
+ | |||
+ | Рекурсия | ||
+ | |||
+ | === Пример применения рекурсии === | ||
+ | |||
=== Программа, | === Программа, | ||
Строка 17: | Строка 53: | ||
var | var | ||
gd, gm: smallint; | gd, gm: smallint; | ||
- | mx, my, cx, cy:smallint, | + | mx, my, cx, cy:smallint; |
- | x, y, d:smalint; | + | x, y, d:smallint; |
begin | begin | ||
Строка 27: | Строка 63: | ||
{далее все, что Вы хотите нарисовать, | {далее все, что Вы хотите нарисовать, | ||
- | mx := maxX; | + | mx := getmaxX; |
- | my := maxY; | + | my := getmaxY; |
cx := mx div 2; | cx := mx div 2; | ||
cy := my div 2; | cy := my div 2; | ||
Строка 60: | Строка 96: | ||
var | var | ||
gd, gm: smallint; | gd, gm: smallint; | ||
- | mx, my, cx, cy:smallint, | + | mx, my, cx, cy:smallint; |
- | x, y, d:smalint; | + | x, y, d:smallint; |
| | ||
| | ||
Строка 81: | Строка 117: | ||
{далее все, что Вы хотите нарисовать, | {далее все, что Вы хотите нарисовать, | ||
- | mx := maxX; | + | mx := getmaxX; |
- | my := maxY; | + | my := getmaxY; |
cx := mx div 2; | cx := mx div 2; | ||
cy := my div 2; | cy := my div 2; | ||
Строка 239: | Строка 275: | ||
+ | <code pascal | Рисование квадрата в центре> | ||
+ | |||
+ | uses oglgraph; | ||
+ | |||
+ | var | ||
+ | gd, gm : smallint; | ||
+ | mx, my, cx, cy : smallint; | ||
+ | x, y, d : smallint; | ||
+ | |||
+ | procedure Serp(x1, y1, x2, y2: smallint; n: Integer); | ||
+ | var | ||
+ | x1n, y1n, x2n, y2n: smallint; | ||
+ | |||
+ | begin | ||
+ | if n > 0 then | ||
+ | begin | ||
+ | x1n := 2*x1 div 3 + x2 div 3; | ||
+ | x2n := x1 div 3 + 2*x2 div 3; | ||
+ | y1n := 2*y1 div 3 + y2 div 3; | ||
+ | y2n := y1 div 3 + 2*y2 div 3; | ||
+ | Rectangle(x1n, | ||
+ | Serp(x1, y1, x1n, y1n, n-1); | ||
+ | Serp(x1n, y1, x2n, y1n, n-1); | ||
+ | Serp(x2n, y1, x2, y1n, n-1); | ||
+ | Serp(x1, y1n, x1n, y2n, n-1); | ||
+ | Serp(x2n, y1n, x2, y2n, n-1); | ||
+ | Serp(x1, y2n, x1n, y2, n-1); | ||
+ | Serp(x1n, y2n, x2n, y2, n-1); | ||
+ | Serp(x2n, y2n, x2, y2, n-1) | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | begin | ||
+ | gd := Detect; | ||
+ | gm := DetectMode; | ||
+ | initgraph(gd, | ||
+ | |||
+ | mx := getmaxX; | ||
+ | my := getmaxY; | ||
+ | cx := mx div 2; | ||
+ | cy := my div 2; | ||
+ | |||
+ | |||
+ | d := cx div 4; | ||
+ | x := cx; | ||
+ | y := cy; | ||
+ | |||
+ | |||
+ | Rectangle(x-d, | ||
+ | Serp(x-d, y-d, x+d, x+d, 4); | ||
+ | repeat until graphkeypressed; | ||
+ | // клавиши для завершения работы программы - | ||
+ | // иначе рискуете ничего толком не увидеть | ||
+ | |||
+ | closegraph(); | ||
+ | |||
+ | end. | ||
+ | |||
+ | |||
+ | </ | ||