這個程序的基本思路是從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所有數字只和的時候,不能打印出任何數字
遞歸真的不好理解啊