k
合計する数を選択する方法の数を見つける必要があります。n
ここで、1<= k <= n
。番号は繰り返されません。私は再帰的な解決策を試していますが、これは無限ループに陥ると思います。
void noofways(int firstnumchosen,int sum,int numofnum)
{
if(sum<0)
return;
if(sum==0 && numofnum!=0)
return;
if(sum==0 && numofnum==0){
globalcount++;
return;
}
if(numofnum<=0)
return;
// not choosing the first number
noofways(firstnumchosen+1,sum,numofnum);
//choosing the first number
noofways(firstnumchosen+1,sum-firstnumchosen,numofnum-1);
}
globalcount
ここではグローバル変数です。3つの数値を使用して7の合計を取得するには、関数を呼び出しますnoofways(1,8,3);
。わかりやすくするために、解集合は(1,2,5)、(1,3,4)などで構成されています。
関数が無限に実行されるのはなぜですか?