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