#includeint k = 0;//静态全局变量的设置,观察得当c计算结束时返回到栈底时,恰有c的计算次数正好就是k从0开始累加到c计算结束 int y(r) { if (r == 1||r==0) return 1; else return r * y( r - 1); } int x(int n,int r)//主要判断函数 { int c,j; k++; if (r == 1) return n; else { c = n * x(n - 1, r-1); } if(k!=r)//核心 return c; else//在这里,正好k=r,进入else { j = y(r);//进入y函数 return c / j; } } int main(void) { int i, o; while (scanf_s("%d%d", &i, &o) != EOF) { printf("%d", x(i, o)); k = 0;//输入结束后一定要重置k的值,一个细节,非常重要 } return 0; }
好长时间后观察到了,r的变化情况,思考是否利用return c 到第一次栈底的时候,次数与r的关系
进而进入else程序,这一步简直是最难的一步



