#include<stdio.h> const int MaxSize=50; struct { int vn; int fn; int flag; }st[MaxSize]; int top=-1; int fun1(int n) { top++; st[top].vn=n; st[top].flag=0; while(top>-1) { if (st[top].flag==0) { if (st[top].vn-1==1) { top++; st[top].vn=1; st[top].fn=1; st[top].flag=1; } else { top++; st[top].vn=st[top-1].vn-1; st[top].flag=0; } } else if (st[top].flag==1) { st[top-1].fn=st[top].fn*st[top-1].vn; top--; st[top].flag=1; } if (top==0&&st[top].flag==1) { printf("%d\n",st[top].fn); break; } } return 0; } int main() { fun1(4); }