如何编写从M中选N的组合数程序,一个不用递归方法设计,一个用递归方法设计,是C++的

LIUJUNJUNBIN 2007-12-17 11:15:20
如何编写从M中选N的组合数程序,一个不用递归方法设计,一个用递归方法设计,是C++的程序代码,  谢谢!!!
...全文
405 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidowx 2009-10-08
  • 打赏
  • 举报
回复
分治法
兰博618 2008-12-29
  • 打赏
  • 举报
回复
5楼
递归是回朔法
phoebe_lover 2008-10-13
  • 打赏
  • 举报
回复
用来买彩票吧?
yangliang1132 2008-10-09
  • 打赏
  • 举报
回复
好用!
fqj2004 2008-06-26
  • 打赏
  • 举报
回复
按公式算呗,C(M,N)=M!/(M-N)!N!
写一个函数算阶乘,
要么递归,要么用for循环直接算1X2X3...XM
WizardOz 2008-06-11
  • 打赏
  • 举报
回复
不会用非递归解。
free2o 2008-05-22
  • 打赏
  • 举报
回复
#include <stdio.h>

void getn(int a[], int b[] , int m, int n, int index,int lastindex)
{
int i = lastindex + 1;
if(index == n )
{
int x;
for(x = 0 ; x < n ;x ++)
{
printf(" %d ",a[b[x]]);
}
printf("\n");
return ;
}
while( i < m)
{
b[index] = i;
getn(a,b,m,n,index + 1,i);
i ++ ;
}

}
void agen(int a[],int m, int n) /* from m get n */
{
int i ,j ;
int b[100] = {0}; /* big then n */
i = j = 0;
while(b[0] < m ) {
while( i < m) {
if(j == n - 1 ) {
int x ;
for( x = 0 ; x < n ; x ++) {
printf(" %d ",a[b[x]]);
}
printf("\n");
} else {
j ++;
}
i ++;
b[j] = i;

}
do {
j --;
b[j] ++ ;
} while(b[j] >= m );
i = b[j] ;
}
}
int main()
{
int a[10] = {0, 1,2,3,4,5,6,7,8,9};
int b[20] ={0};
getn(a,b,10,5,0,-1);
agen(a,10,5);
return 0;
}
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
接分先!
lyg_wangyushi 2007-12-24
  • 打赏
  • 举报
回复
或用杨辉三角,开一个表求解 
lyg_wangyushi 2007-12-21
  • 打赏
  • 举报
回复
可以用r-组合的典序枚举算法(非递归)
chengzhe 2007-12-18
  • 打赏
  • 举报
回复
呵呵 以前写过 动态规划

250

社区成员

发帖
与我相关
我的任务
社区描述
其他产品/厂家
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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