
202 Гл. 3. Машинно-ориентированные алгоритмические языки
Получающаяся при этом рекурсивная подпрограмма
funct/>=(sequ
real
a, int и,
real
x
со а+ О
hQun
Anulength(a)-
1 со)
real:
if n-0 then а[Ц
D и>0 then;?(<?,
п-1,х)УХ
+ а[п + Ц fi
(с
параметром п вместо i) не является, к сожалению, повтори-
тельной и не ведёт непосредственно к итеративной формули-
ровке.
(Относительно операции .[.] см. пример (g) из
2.3.2.)
К
повторительной рекурсии можно прийти, если взяться за
дело „с другого конца". Обозначим через f(a, n, i, s, х) выра-
жение
(.. .((s X х +
a[i])
X х + a[i + 1]) X х + ...) X х + а[п + 1],
1
^i^n + 1. Тогда f(a, п, 1, 0, х) =р(а, п, х) (вложение!).
Далее, имеем
для /<n: f(a,ti,i,s,x) = f(a,n,i+l,sXx + a{i], х),
а также f(a,n,n-\- I ,s,x) = a[n-\- 1].
Тем самым (избавляясь от параметров а, п, х подпрограммы f
после её подчинения объемлющей подпрограмме) мы получаем
funct
/iw/i =
(sequ
real
a, int и,
real
x
со а +
<>
Лп
—length
(а)
—
1 со)
real:
ffunct/s(int
/,
real
а со
iSiiAi^n
+ l со)
real;
П/йи then/(f+I,jxx+et;])fi;
/0,0) J
Отсюда уже непосредственно следует итеративная форму-
лировка:
funct
/w«s(sequ
real a, int n, real x
со а
+ О
л
п=/en^rt
(в)
~
1
со) real:
T(var int
г,
var real j)
:=
(1,0);
while
fen do
Сравните с этой подпрограммой подпрограмму horn4 из
3.2.5.
3.3.3.3
Аналогично можно рассмотреть и задачу параллельного вы-
числения
значения полинома. Если через g(a, n, i, h, k, I, x),
обозначить
h + k + a[n + 1 - i] X / + a[n - i] X / X x + ... +
a[\\Xl
X x
n
~K