Рекурсивные процедуры
Это процедуры, которые обращаются сами к себе, пока не выполнится условие.
(см. ?remember).
Задача 10.2. Числа Фибоначчи
Вычислить числа Фибоначчи и время расчета для:
F(n) = F(n – 1) + F(n – 2), F(0) = 0, F(1) = 1.
- Fib:=proc(n::integer) option remember;
- if n<=l then n else Fib(n-l)+Fib(n-2) end if; end proc;
- NF:=NULL:
- for i from 10 to 40 do NF:=NF,Fib(i); end do:
- NF:=[NF];
- ti:=time():
- Fib(3000);
- tt:=time()-ti;
- op(4,eval(Fib));
- forget(Fib);
Если включить опцию remember (см. ?remember), Maple создаст таблицу памяти, в которой будут храниться все вычисленные величины, и их не надо будет вычислять заново. Таблица памяти доступна как op(4,eval(Fib)), и с нею можно работать как с табличным объектом. Таким способом увеличивается эффективность вычислений, экономится время, но занимается память. Чтобы очистить таблицу памяти процедуры, можно использовать функции forget или restart.
