利用递归巧妙实现组合

http://www.cnblogs.com/heyonggang/p/3642455.html 借鉴了该博客中的
输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来</span></span>
list<char>list1;  
void combine(char *str,int m, int len,int n)   
{  
	// 递归出口  
	if(m==len+1)  
		return;  

	// 输出找到的结果  
	if(0 == n)  
	{  
		for(list<char>::iterator iter = list1.begin(); iter != list1.end(); iter++)  
		{cout << *iter ;}
		cout<<"\n";
		return;
	}  
  
	list1.push_back(str[m]);    
	combine(str,m+1,len,n-1);   //放第m个字符
	list1.pop_back();  
	combine(str, m+1,len,n);     //不放第m个字符   
}  

int main()  
{  
   char str[]="abcd";
	combine(str,0,4,2);  
	return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值