#include<stdio.h>
int 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));
/*int p = x(i, o);
int u = y(o);
printf("%d", p/ u);*/
k = 0;//输入结束后一定要重置k的值,一个细节,非常重要
}
return 0;
}
好长时间后观察到了,r的变化情况,思考是否利用return c 到第一次栈底的时候,次数与r的关系
进而进入else程序,这一步简直是最难的一步
|