利用递归计算排列组合,C语言

#includeint k = 0;//静态全局变量的设置,观察得当c计算结束时返回到栈底时,恰有c的计算次数正好就是k从0开始累加到c计算结束
int y(r)
{if (r == 1||r==0) return 1;elsereturn  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程序,这一步简直是最难的一步


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部