这个程序的基本思路是从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所有数字只和的时候,不能打印出任何数字
递归真的不好理解啊