在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C/ 遞歸問題,不懂如何輸出一個(gè)集合全部的子集

遞歸問題,不懂如何輸出一個(gè)集合全部的子集

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

}

回答
編輯回答
尋仙

你是在問什么...是問的背包問題嗎...

更新:
因?yàn)槟愕膕napsack函數(shù)在i的時(shí)候會去令i位的m等于0或者等于1.
然后去算i-1的時(shí)候的snapsack()。
最后到了base case(也就是i==0的時(shí)候),打印出整個(gè)m數(shù)組。
因?yàn)槟阌胢表示的話,m等于0或者1.
因此這個(gè)遞歸可以得出所有結(jié)果。

PS:

  1. 你這個(gè)不是背包問題,只是恰好問題里出現(xiàn)了背包=。 =
  2. knapsack 不是snapsack。
2018年5月4日 16:38