#include<iostream> using namespace std; class Ack { public: int *n; Ack *f; Ack *s; Ack() { n = NULL; f = NULL; s = NULL; } Ack(int a) { n = new int; *n = a; f = NULL; s = NULL; } Ack(int a,int b) { n = NULL; f = new Ack(); f->n = new int; *(f->n) = a; s = new Ack(); s->n = new int; *(s->n) = b; } void dump() { if(n) { cout<<(*n); } else { cout<<"ack("; f->dump(); cout<<","; s->dump(); cout<<")"; } } void next() { if(n) { return; } if(s->n) { if(*(f->n)==0) { n=new int; *n=*(s->n)+1; f=NULL; s=NULL; } else if(*(s->n)==0) { (*(f->n))--; (*(s->n))=1; } else { s=new Ack(*(f->n),*(s->n)-1); (*(f->n))--; } } else { s->next(); } } }; int main() { Ack a=Ack(2,2); while(!a.n) { a.dump(); cout<<endl; a.next(); } a.dump(); cout<<endl; }
Standard input is empty
ack(2,2) ack(1,ack(2,1)) ack(1,ack(1,ack(2,0))) ack(1,ack(1,ack(1,1))) ack(1,ack(1,ack(0,ack(1,0)))) ack(1,ack(1,ack(0,ack(0,1)))) ack(1,ack(1,ack(0,2))) ack(1,ack(1,3)) ack(1,ack(0,ack(1,2))) ack(1,ack(0,ack(0,ack(1,1)))) ack(1,ack(0,ack(0,ack(0,ack(1,0))))) ack(1,ack(0,ack(0,ack(0,ack(0,1))))) ack(1,ack(0,ack(0,ack(0,2)))) ack(1,ack(0,ack(0,3))) ack(1,ack(0,4)) ack(1,5) ack(0,ack(1,4)) ack(0,ack(0,ack(1,3))) ack(0,ack(0,ack(0,ack(1,2)))) ack(0,ack(0,ack(0,ack(0,ack(1,1))))) ack(0,ack(0,ack(0,ack(0,ack(0,ack(1,0)))))) ack(0,ack(0,ack(0,ack(0,ack(0,ack(0,1)))))) ack(0,ack(0,ack(0,ack(0,ack(0,2))))) ack(0,ack(0,ack(0,ack(0,3)))) ack(0,ack(0,ack(0,4))) ack(0,ack(0,5)) ack(0,6) 7