从N个数中取M个数有多少种取法递归写法!!!

To_Drill 2017-03-22 09:59:47
不用递归的话用几层循环就解决了,比如这个从12个数种取5个数
#include <math.h>
int main(){
int count=0;
for(int a=1;a<=12;a++){ //从12个数中取5个数所有取法
for(int b=a+1;b<=12;b++){
for(int c=b+1;c<=12;c++){
for(int d=c+1;d<=12;d++){
for(int e=d+1;e<=12;e++){
count++;
}
}
}
}
}
printf("%d",count);
return 0;
}
求一种用递归的写法!最好是N和M输出有几种取法!
...全文
1679 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
暹罗siam 2017-05-13
  • 打赏
  • 举报
回复
从4个里面取三个--> f(4, 3, 0, "", 0);
暹罗siam 2017-05-13
  • 打赏
  • 举报
回复
/** * 先判断个数是否相等,在判断是否超出值范围 * * @param n * 从n个数中取m个数 * @param m * @param count * 已经取了几个数(进行了多少层循环) * @param s * 累加的字符串(结果) * @param init * 每次循环的初始值 */ public static void f(int n, int m, int count, String s, int init) { if (count == m) { System.out.println(s); return; } if (init >= n) { // System.out.println("init>=n"); return; } for (int a = init; a < n; a++) { // System.out.println("a="+a); f(n, m, count + 1, s + a + " ", a + 1); // System.out.println("end"); } }
To_Drill 2017-03-23
  • 打赏
  • 举报
回复
引用 1 楼 u014414940 的回复:

int totalNum(int a,int b)
{
	if(b==0)
		return 1;
	else if(b==1)
		return a;
	else
		return a*totalNum(a-1,b-1)/b;
}
具体对a,b的详细控制没有写(本代码中默认a和b都是正整数,切a>=b),直接调用该方法,传入两个参数即可,望采纳。
兄弟,能解释下为什么其他情况return a*totalNum(a-1,b-1)/b;这个呢?
To_Drill 2017-03-23
  • 打赏
  • 举报
回复
引用 2 楼 vnvlyp 的回复:
[quote=引用 楼主 zzf1510711060 的回复:] 不用递归的话用几层循环就解决了
就解决了 不就是N排M么?又是多层循环,又是递归的,你逗我呢?[/quote]那请大神来一发代码,让我学习一下呗!
vnvlyp 2017-03-23
  • 打赏
  • 举报
回复
引用 楼主 zzf1510711060 的回复:
不用递归的话用几层循环就解决了
就解决了 不就是N排M么?又是多层循环,又是递归的,你逗我呢?
羽灵天 2017-03-23
  • 打赏
  • 举报
回复

int totalNum(int a,int b)
{
	if(b==0)
		return 1;
	else if(b==1)
		return a;
	else
		return a*totalNum(a-1,b-1)/b;
}
具体对a,b的详细控制没有写(本代码中默认a和b都是正整数,切a>=b),直接调用该方法,传入两个参数即可,望采纳。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧