void sumk(int *x,int k,int end,int sum,int start)
//不必rerturn 因为sum作为参数在传递
/*从n个里取k个 ,k为剩余应该取的数目,sum为当前和,start取第?个数的
起始循环坐标,end为末尾坐标*/
{if(k==0){
if(isprime(sum)) m++;
//选取完毕后,判断sum是否是质数
}
else
{for(int i=start;i<=end;i++)//循环遍历选择第?个数字all可能
{
sumk(x,k-1,end+1,sum+x[i],i+1);}
//选取某个数字作为第?个数字后,递归选取下一个数字,sum作为参数传递
}
}
无注释容易食用版本
int sumk(int *x,int k,int end,int sum,int start)//从n个里取k个
{if(k==0){
if(isprime(sum)) m++;
}
else
{for(int i=start;i<=end;i++)
{
sumk(x,k-1,end+1,sum+x[i],i+1);}
}
return sum;
}