Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
В отличие от итерации, рекурсия не является существенной для программирования на PL/SQL. Любая проблема, которая может быть решена рекурсией, может быть решена и итерацией. Далее, концепцию итерации легче усвоить, поскольку примеры рекурсии не столь часты в повседневной жизни. Как следствие, итеративную версию подпрограммы обычно легче спроектировать, чем рекурсивную версию той же программы. Однако рекурсивная версия обычно проще, меньше, и потому ее легче отладить. Сравните следующие функции, которые вычисляют n-й член ряда Фибоначчи:
-- рекурсивная версия
FUNCTION fib (n POSITIVE) RETURN INTEGER IS
BEGIN
IF (n = 1) OR (n = 2) THEN
RETURN 1;
ELSE
RETURN fib(n - 1) + fib(n - 2);
END IF;
END fib;
-- итеративная версия
FUNCTION fib (n POSITIVE) RETURN INTEGER IS
pos1 INTEGER:= 1;
pos2 INTEGER:= 0;
cum INTEGER;
BEGIN
IF (n = 1) OR (n = 2) THEN
RETURN 1;
ELSE
cum:= pos1 + pos2;
FOR i IN 3..n LOOP
pos2:= pos1;
pos1:= cum;
cum:= pos1 + pos2;
END LOOP;
RETURN cum;
END IF;
END fib;
Рекурсивная версия функции fib более элегантна. Однако итеративная версия эффективнее; она работает быстрее и использует меньше памяти. Причина этого в том, что каждый рекурсивный вызов требует дополнительного времени и памяти. Чем больше число рекурсивных вызовов, тем больше разница в эффективности. Тем не менее, если вы ожидаете, что число рекурсивных вызовов будет невелико, можно предпочесть рекурсивную версию из-за ее читабельности.
Реализация построения кривой Гильберта.
На рисунке кривые первого, второго и третьего порядка.
§ Каждый последующий порядок образуется с предыдущем
§ При переходе на следующий уровень вершины уменьшаются в два раза.
Правило построение кривой:
А
В
С
D
Для реализации, А = gl, B=gu, C = gr, D = gd.
program z1;
uses crt,graph;
var a,h,s,ex,x,y,r,d,gm,o:integer;
procedure gd(n:integer);forward;
procedure gu(n:integer);forward;
procedure gr(n:integer);forward;
procedure gl(n:integer);
begin
if n>0 then
begin
gd(n-1);x:=x-h;LineTo(x,y);
gl(n-1);y:=y+h;LineTo(x,y);
gl(n-1);x:=x+h;LineTo(x,y);
gu(n-1);
end;
end;
procedure gu(n:integer);
begin
if n>0 then
begin
gr(n-1);y:=y-h;LineTo(x,y);
gu(n-1);x:=x+h;LineTo(x,y);
gu(n-1);y:=y+h;LineTo(x,y);
gl(n-1);
end;
end;
procedure gr(n:integer);
begin
if n>0 then
begin
gu(n-1);x:=x+h;LineTo(x,y);
gr(n-1);y:=y-h;LineTo(x,y);
gr(n-1);x:=x-h;LineTo(x,y);
gd(n-1);
end;
end;
procedure gd(n:integer);
begin
if n>0 then
begin
gl(n-1);y:=y+h;LineTo(x,y);
gd(n-1);x:=x-h;LineTo(x,y);
gd(n-1);y:=y-h;LineTo(x,y);
gr(n-1);
end;
end;
function pow2(a:integer):integer;
var i,p:integer;
begin
p:=1;
for i:=1 to a do p:=p*2;
pow2:=p;
end;
begin clrscr;
ex:=1;
while ex=1 do
begin
write('Input Grade Of Graphic ');readln(a);
write('Side of square');readln(s);
write('Orientation(1-u,2-r,3-d,4-l)');readln(o);
d:=Detect;
InitGraph(d,gm,'');
s:=round(s*GetMaxY/100);
h:=round(s/(pow2(a)-1));
x:=GetMaxX div 2;
y:=GetMaxY div 2;
r:=s div 2;
case o of
1: begin
x:=x - r;
y:=y + r;
moveto(x,y);
gu(a);
end;
2:begin
x:=x - r;
y:=y + r;
moveto(x,y);
gr(a);
end;
3: begin
x:=x + r;
y:=y - r;
moveto(x,y);
gd(a);
end;
4: begin
x:=x + r;
y:=y - r;
moveto(x,y);
gl(a);
end;
end;
readln;
closegraph;
Writeln('Proceed? (1/0)');
readln(ex);
end;
end
.
|
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!