ВУЗ:
Составители:
Рубрика:
33
begin
writeln (′ввод положительного числа: ′);
readln(z);
writeln(′десятичное число: ′,z:6);
writeln(′восьмеричное число: ′);
convert(z);
end.
Пример 11:
Получение чисел Фибоначчи. Будем вычислять n–ый элемент ряда
Фибоначчи как итеративно (т.е. в цикле, начиная с f[1] до f[n]), так и
рекурсивно по формуле (1). Причём рекурсивная функция вызывает себя
дважды.
program fibonacci(input,output);
uses crt; {uses фраза указывает на
использование в
программе объектов описанных в другом месте }
function fibit(n:integer):integer; {с помощью итерации}
var a,b,c,i:integer;
begin
a:=1; b:=1;
if (n=1) or (n=2) then fibit:=1 else
begin
for i:=3 to n do begin
c:=a+b; a:=b; b:=c;
end; {для for}
fibit:=c;
end; {для else}
end; {для тела функции}
function fibrek(n:integer):integer;
begin
write(′ ′); delay(300);
{за счёт стандартной процедуры delay программа
приостанавливается на 0.3 сек.}
if (n+1) or (n=2) then fibrek:=1
else fibrek:=fibrek(n-1)+fibrek(n-2);
write (chr(8),′ ′chr(8)); delay(300);
{chr(8) код клавиши Backspace}
end;
var k,n,result:integer;
begin {основная программа}
clrscr; {очистка экрана}
write (′k=?′);
readln(k);
34
for n:=1 to k do begin
writeln(′итеративно: ′,fibit(n):5);
writeln(′рекурсивно: ′);
writeln(′!…#…!…=…!…#′);
write(′глубина рекурсии: ′);
result:=fibrek(n);
writeln;
write(result);end;
end.
Итерация требует меньше места в памяти и машинного времени
выполнения, чем рекурсия, которой необходимы затраты на управление
стеком. Поэтому следует отдавать предпочтение итерации.
Задание:
Написать программу для решения примера 7, 11, используя
рекурсивную процедуру. Написать программу примера 8 и10, используя
рекурсивную функцию.
Побочный эффект при использовании
подпрограммы функции
Этот эффект возникает, когда в теле функции имеются операторы
присваивания, которые изменяют значение глобальных переменных,
описанных в объемлющем блоке. В этом случае возникает ситуация при
которой значение выражения, использующее вызов такой функции зависит
от порядка следования операндов, что является потенциалом трудно
уловимых программных ошибок.
Примером побочного эффекта служит следующая программа
program sideffect;
var a,z:integer; {a,z- глобальные переменные}
function change(x:integer):integer;
begin
z:=z-x; {изменение значения глобальной переменной}
change:=sqr(x);
end;
begin
z:=10; a:=change(z); writeln(a,′ ′:3,z);
z:=10; a:=change(10)*change(z);
writeln(a,′ ′:3,z);
z:=10; a:=change(z)* change(10);
begin for n:=1 to k do begin writeln (′ввод положительного числа: ′); writeln(′итеративно: ′,fibit(n):5); readln(z); writeln(′рекурсивно: ′); writeln(′десятичное число: ′,z:6); writeln(′! # ! = ! #′); writeln(′восьмеричное число: ′); write(′глубина рекурсии: ′); convert(z); result:=fibrek(n); end. writeln; write(result);end; Пример 11: end. Получение чисел Фибоначчи. Будем вычислять nый элемент ряда Фибоначчи как итеративно (т.е. в цикле, начиная с f[1] до f[n]), так и Итерация требует меньше места в памяти и машинного времени рекурсивно по формуле (1). Причём рекурсивная функция вызывает себя выполнения, чем рекурсия, которой необходимы затраты на управление дважды. стеком. Поэтому следует отдавать предпочтение итерации. program fibonacci(input,output); Задание: uses crt; {uses фраза указывает на использование в Написать программу для решения примера 7, 11, используя программе объектов описанных в другом месте } рекурсивную процедуру. Написать программу примера 8 и10, используя function fibit(n:integer):integer; {с помощью итерации} var a,b,c,i:integer; рекурсивную функцию. begin a:=1; b:=1; Побочный эффект при использовании if (n=1) or (n=2) then fibit:=1 else подпрограммы функции begin for i:=3 to n do begin Этот эффект возникает, когда в теле функции имеются операторы c:=a+b; a:=b; b:=c; end; {для for} присваивания, которые изменяют значение глобальных переменных, fibit:=c; описанных в объемлющем блоке. В этом случае возникает ситуация при end; {для else} которой значение выражения, использующее вызов такой функции зависит end; {для тела функции} от порядка следования операндов, что является потенциалом трудно function fibrek(n:integer):integer; уловимых программных ошибок. begin Примером побочного эффекта служит следующая программа write(′ ′); delay(300); program sideffect; {за счёт стандартной процедуры delay программа var a,z:integer; {a,z- глобальные переменные} приостанавливается на 0.3 сек.} function change(x:integer):integer; if (n+1) or (n=2) then fibrek:=1 begin else fibrek:=fibrek(n-1)+fibrek(n-2); z:=z-x; {изменение значения глобальной переменной} write (chr(8),′ ′chr(8)); delay(300); change:=sqr(x); {chr(8) код клавиши Backspace} end; end; begin var k,n,result:integer; z:=10; a:=change(z); writeln(a,′ ′:3,z); begin {основная программа} z:=10; a:=change(10)*change(z); clrscr; {очистка экрана} writeln(a,′ ′:3,z); write (′k=?′); z:=10; a:=change(z)* change(10); readln(k); 33 34
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »