質問
Cコースを行っています。 再帰的なXORバイナリを実行する必要がありますが、いくつかの制限があります。 ループやmath.h関数を使用することも、XOR関数から別の関数を呼び出すこともできません。
これは関数のプロトタイプです:
int binaryXor(int firstnumber[], int secondnumber[], int length);
firstnumberとsecondnumberは1と0の同じ長さの配列で、長さはその長さです。
この関数は、これら2つの配列のXORの10進数値を返す必要があります。 XORの実行は非常に簡単ですが、すべての制限を使用して10進数に変換するにはどうすればよいですか?
解決
これは標準的な再帰的な質問です。トリックは、1と0が続く1と0の文字列の整数値が2 *文字列の整数値に数字の値を加えたものであることを認識することです。
だからあなたは次のようなことをしたいと思うでしょう
if( length <= 0) return 0;
return 2 * binaryXOR(firstnumber, secondnumber, length - 1) + (firstnumber[length - 1] ^ secondnumber[length - 1]);
他のヒント
ループのない再帰関数を作成するには、次の質問に答える必要があります。
&quot;問題に対する答えをより小さな問題の観点から表現するにはどうすればよいですか?&quot;
この場合、問題は、見るべき length
桁があるが、ループすることが許可されていないことです。それでは、ループを必要としないある程度の作業とともに、より小さいxorの観点からサイズ length
のxorをどのように表現しますか?
[編集:ちょっと待って、質問をもう一度見てください。xorが既にソートされていると言っているので、すでにこれを行っていると思います。その場合、上記の私のコメントはあなたが知る必要がある唯一のことです:あなたは終わった。 Cの int
は10進数値ではなく、単なる値です。 int
に格納または返すために、10進数に変換する必要はありません。
もし興味があれば、再帰関数を使用してintを10進数値に変換するコードを投稿できます。 1つの簡単な方法は、「ダウン」の途中で解決することです。 10の累乗と比較することにより、何桁が必要か。そして、「戻る」途中で最後から数字を出力します。]
ループの代わりに再帰的な関数呼び出しを使用できます。