1

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)などで構成されています。

関数が無限に実行されるのはなぜですか?

4

1 に答える 1

3

noofways(x, y, z)を呼び出すnoofways(x+1, y, z)ので、xは無制限に成長します。

xが大きすぎるかどうかをテストし、パラメータチェック中に戻る必要があります。

if (firstnumchosen > something)
    return;

これだけが問題ではありませんが、無限ループの原因です。

于 2012-10-19T02:48:01.523 に答える