1. 程式人生 > >利用遞迴巧妙實現組合

利用遞迴巧妙實現組合

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;  
}