Купить Matlab  |  Mathematica  |  Mathcad  |  Maple  |  Statistica  |  Другие пакеты Поиск по сайту
Internet-класс  |  Примеры  |  Методики  |  Форум  |  Download
https://hub.exponenta.ru/


Программирование в среде Maple


В начало книги

 

Предметный указатель

Процедурное программирование. Рекурсивные процедуры, команда RETURN, опция remember
К предыдущему разделуК следующему разделу

Эти процедуры содержат обращения к самим себе. Напишем в качестве примера процедуру вычисления чисел Фибоначчи

> restart;Fibonacci:=proc(n::nonnegint)
if n<2 then
RETURN(n);
fi;
Fibonacci(n-1)+Fibonacci(n-2);
end;

[Maple Math] [Maple Math]

В этой процедуре явно определен тип переменной n - nonnegint (неотрицательное целое число). При попытке вызвать процедуру с объектом другого типа Maple выдаст сообщение об ошибке.

В процедуре применена команда RETURN (выражение), прерывающая выполнение команды и возвращающее значение "выражения".

В данной процедуре эта команда применена для возвращения числа n при n < 2. Вычислим последовательность чисел Фибоначчи от 1 до 15:

> seq(Fibonacci(i),i=0..15);

[Maple Math]

С целью увеличения скорости выполнения расчетов в рекурсивных процедурах вводится опция remember, при помощи которой сохраняется в памяти предыдущий результат вычисления. С применением этой опции процедура вычисления чисел Фибоначчи запишется в следующем виде:

> F:=proc(n::nonnegint)
option remember;
if n<2 then
RETURN(n)
fi;
if irem(n,2)=0 then
F(n):=2*F(n/2-1)*F(n/2)+F(n/2)^2 else
F(n):=F((n-1)/2+1)^2+F((n-1)/2)^2 fi;
end;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Если в первом варианте процедуры время вычисления каждого следующего числа Фибоначчи увеличивается по экспоненте, то во втором линейно с увеличением n. Так, например, 2000 -е число Фибоначчи вычисляется почти мгновенно:

> F(2000);

[Maple Math] [Maple Math] [Maple Math] [Maple Math] [Maple Math]

В то же время для первого варианта процедуры уже 20 - е число Фибоначчи вычисляется несколько секунд. Сравним при помощи команды time времена, затрачиваемые процедурами для вычисления 20 -ого числа Фибоначчи:

> time(F(20));time(Fibonacci(20));

[Maple Math]

[Maple Math]

В начало страницы К предыдущему разделуК следующему разделу

Предметный указатель

| На первую страницу | Поиск | Купить Matlab

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter


Copyright © 1993-2024. Компания Softline. Все права защищены.

Дата последнего обновления информации на сайте: 04.03.17
Сайт начал работу 01.09.00