include<stdio.h>
void Snapsack(int i,int m[],int n);
int main()
{
int m[4]={0};
Snapsack(4,m,4);
return 0;
}
void Snapsack(int i,int m[],int n)
{
if(!i)
{
for(int j=0;j<n;j++)
printf("%d",m[j]);
printf("\n");
}
else
{
//这段代码为什么可以得出所有可能性;不大理解这种递归;
m[i]=1;
Snapsack(i-1,m,n);
m[i]=0;
Snapsack(i-1,m,n);
}
}
你是在问什么...是问的背包问题吗...
更新:
因为你的snapsack函数在i的时候会去令i位的m等于0或者等于1.
然后去算i-1的时候的snapsack()。
最后到了base case(也就是i==0的时候),打印出整个m数组。
因为你用m表示的话,m等于0或者1.
因此这个递归可以得出所有结果。
PS: