Рекурсивная автоматная модель вычисления факториала

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; }