Рекурсивная автоматная модель вычисления факториала
class FFactRec : public FRcrsn
{
public:
int nF; // факториал
FFactRec(int n);
virtual ~FFactRec();
private:
int nK; // данные
int x1();
void y1();
void y2();
protected:
void CallFactorial() {
if (pRcrsn) delete pRcrsn;
pRcrsn = new FFactRec(nK-1);
pRcrsn->FCall(this);
};
int PrevFactorial() { return ((FFactRec*)pRcrsn)->nF; };
};
FFactRec::FFactRec(int n) :FRcrsn(TT_FactRec) { nK=n; nF=1;}
FFactRec::~FFactRec() { }
LArc TT_FactRec[] = {
LArc(?f1?, ?00?, ?x1?, ?—?),
LArc(?f1?, ?f2?, ?^x1?, ?y1?),
LArc(?f2?, ?00?, ?—?, ?y2?),
LArc()
};
int FFactRec::x1() { return nK==0; }
void FFactRec::y1() { CallFactorial(); }
void FFactRec::y2() { nF = PrevFactorial()*nK; }