| 
 bom, a def. do seu problema contém um erro, você 
está pedindo para retornar uma combinação de n índices, ou seja só existe 
uma! 
mas tudo bem, acho que você tem a liberdade de usar 
quantos elementos quiser do vetor p. 
pense que você tem um vetor r com n 
elementos. 
void 
mochila(int P, int* 
p, int* r, int 
i, int n) 
{ 
    if ( i < n ) 
    { 
        
/* coloca o i'ésimo item na 
mochila */         r[i] 
= 1; 
        
/* o peso adicional que deve ser colocado é P - 
p[i] */ 
        
mochila( P - p[i], p, r, i + 1, n ); 
        
/* não coloca o i'ésimo item na 
mochila */ 
        r[i] 
= 0; 
        
mochila( P, p, r, i + 1, n ); 
    } 
    else if ( P == 
0 ) 
    { 
        /* Imprime os itens 
inseridos */ 
        for ( int j = 0; j < n; 
j++ ) 
        { 
            
printf( "Combinação encontrada: \n" );
                 
printf( "p%d ", j );        
    if ( 
r[j] )         
} 
    } 
    return; 
} 
chame a função dessa forma: 
mochila( P, p, r, 0, n ); 
pode haver algum erro pq eu fiz sem testar, mas 
deve rodar. 
  |