このコードがひどく非効率的であることは別として、ここで再帰関数を書いているこの方法は「良いスタイル」と見なされます。たとえば、ラッパーを作成してそれを渡しているのint mid
と同様に、 counterを渡しint count
ます。
このコードが行うことは、配列から値を取得し、それを と組み合わせた値blockIndex
が より大きいかどうかを確認することmid
です。では、非効率であることは別として、このような再帰関数を書く仕事を得ることができるでしょうか?
int NumCriticalVotes :: CountCriticalVotesWrapper(Vector<int> & blocks, int blockIndex)
{
int indexValue = blocks.get(blockIndex);
blocks.remove(blockIndex);
int mid = 9;
return CountCriticalVotes(blocks, indexValue, mid, 0);
}
int NumCriticalVotes :: CountCriticalVotes(Vector<int> & blocks, int blockIndex, int mid, int counter)
{
if (blocks.isEmpty())
{
return counter;
}
if (blockIndex + blocks.get(0) >= mid)
{
counter += 1;
}
Vector<int> rest = blocks;
rest.remove(0);
return CountCriticalVotes(rest, blockIndex, mid, counter);
}