code 35056;
procedure BACKWARD(X,P,Q,I0,NMAX,EPS,I);
value X,P,Q,I0,NMAX,EPS; integer NMAX; real X,P,Q,I0,EPS;
array I;
begin integer M,N,NU; real R,PQ,Y,LOGX;
array IAPPROX[0:NMAX];
I[0]:= I0; if NMAX>0 then
begin for N:= 1 step 1 until NMAX do IAPPROX[N]:= 0;
PQ:= P+Q-1; LOGX:= LN(X);
R:= NMAX+(LN(EPS)+Q*LN(NMAX))/LOGX;
NU:= ENTIER(R-Q*LN(R)/LOGX);
L1: N:= NU; R:= X;
L2: Y:= (N+PQ)*X; R:= Y/(Y+(N+P)*(1-R));
if N<= NMAX then I[N]:= R; N:= N-1;
if N >= 1 then goto L2; R:= I0;
for N:= 1 step 1 until NMAX do R:= I[N]:= I[N]*R;
for N:= 1 step 1 until NMAX do
if ABS((I[N]-IAPPROX[N])/I[N]) > EPS then
begin for M:= 1 step 1 until NMAX do
IAPPROX[M]:= I[M]; NU:= NU+5; goto L1
end
end
end BACKWARD;
eop