//逐个递归
for(i=0; i<w.length; i++)
{
Double dblobj = new Double(w[i]);
retVec.add(dblobj);
dblSum += w[i];
if(dblSum==s)
return true;
else
{
subW = new double[w.length-1];
System.arraycopy(w,0,subW,0,i);
System.arraycopy(w,i+1,subW,i,subW.length-i);
blnFind = digui(s,subW,retVec);
if(blnFind)
return true;
else
retVec.removeElementAt(nowSize);
}//end if
}//end for
return false;
}
public static void main(String[] args)
{
Vector vec = new Vector();
KAO kao = new KAO();
double S = 21;
double[] W = new double[]{7,4,2,9,5,1,3,6,8,10};
boolean blnFind = kao.digui(S,W,vec);
if(blnFind)
{
for(int i=0; i<vec.size(); i++)
System.out.println( ((Double)vec.get(i)).doubleValue() );
}
int knap(int s, int n, int w[]) {
if ( s == 0 )
return (1);
else if ( s<0 || s>0 && n<1 )
return(0);
else if ( knap(s - w[n-1], n - 1, w)==1 ) {
printf("result: n=%d ,w[%d]=%d \n", n, n-1, w[n-1]);
return (1);
}
else
return ( knap(s, n - 1, w) );
}
int main() {
int* w;
int s = 0, n = 0, result = 0, i = 0;
printf("please input s = ");/*输入s*/
scanf("%d", &s);
printf("please input n = ");/*输入n*/
scanf("%d", &n);
w = (int*)malloc(n*sizeof(int));
printf("please input the %d numbers(weight):\n", n);/*输入重量*/
for (i = 0; i < n; i++)
scanf("%d", w+i);
result = knap(s, n, w);
if (result == 0)
printf("no solution!\n");
return 0;
}
public class Recursion {
public static void main(String argv[]){
Thing[] things = new Thing[10];
for(int i = 0; i < 10; i++){
things[i] = new Thing(i + 1);
}