ミスった。組み合わせの数も表示するのね。

#include<stdio.h>
int search(const int w[],int i,int length,int use[],int W,int c){
    if(W == 0){
        for(i=0;i<length;++i)
            if(use[i])printf("%d ",w[i]);
        printf("\n");
        return c+1;
    }else if(W  < 0 || i==length)return c;
    use[i]=1;
    c = search(w,i+1,length,use,W-w[i],c);
    use[i]=0;
    return search(w,i+1,length,use,W,c);
}
int main(){
    const int w[]={10,5,15,7,3};
    int use[sizeof(w)/sizeof(w[0])]={0};
    printf("組み合わせは%d通り\n",search(w,0,5,use,22,0));
}