#include struct Expr { int rank; ts::TPtr terms[2]; }; tfun int depth(Expr e) { fprintf(stderr, "%d/%d, ", e.rank, ts::myRank); if (e.terms[0] && e.terms[1]) { tval int d0 = depth(*e.terms[0]); tval int d1 = depth(*e.terms[1]); return 1+std::max((int)d0,(int)d1); } else { return 0; } } tfun Expr re(int n) { Expr e; e.rank = ts::myRank; if (n > 0) { tval Expr t0 = re(n-1); tval Expr t1 = re(n-1); e.terms[0] = &t0; e.terms[1] = &t1; } return e; } tfun int main(int argc, char *argv[]) { assert(argc == 2); printf("depth=%d\n", (int)depth(re(atoi(argv[1])))); return 0; }