輸入兩個整數 n 和 m,從數列1,2,3.......n 中隨意取幾個數,使其和等於 m

這個程序的基本思路是從1開始尋找,尋找裏面含有1的組合。當尋找結束後,尋找含有2的組合,然後依次進行下去。
 #define  N_Length 10  //定義一組1到n的數字,在這裏定義到10
int res[N_Length]; //定義一個輔助數組,
void dfs1(int m, int t,int n,int dep) //t是從1開始,dep是輔助數組的下標
{
	for (int i=t;i<=n;i++)
	{
		if (m-i>i)  //如果m的值減去第一個 同時還大於第一個,則,將i賦值給res數組的第一個
		{
			res[dep]=i;
			dfs1(m-i,i+1,n,dep+1); //進入遞歸,t的值進行+1,n保持不變,dep+1進入數組的第二個
		}
		else
		{
			if (m>N_Length)//最後 所得到 的數字不能大於最大整個數組的最大長度
			{
				break;
			}
			else
			{
				res[dep]=m;//把最後一個所要求的數放到數組中,這個數不能大於N,也就是整個數組的最大值
			}
			for (int j=0;j<=dep;j++) //打印出一組數字
			{
				printf("%d ",res[j]);
			}
			printf("\n");
			break;
		}
	}

}
m的值大於從1...到n所有數字只和的時候,不能打印出任何數字


遞歸真的不好理解啊


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章