0

我正在学习 C 课程。我需要做一个递归异或二进制,但我有一些限制。我不能使用循环或任何 math.h 函数,也不能从 XOR 函数调用另一个函数。

这是函数原型:

int binaryXor(int firstnumber[], int secondnumber[], int length);

其中 firstnumber 和 secondnumber 是长度相同的 1 和 0 的数组,length 是它们的长度。

该函数应返回这两个数组的 XOR 的十进制值。进行 XOR 非常简单,但是如何在所有限制下将其转换为十进制呢?

4

3 回答 3

3

为了编写没有循环的递归函数,您需要回答以下问题:

“我怎样才能用一个较小的问题来表达我的问题的答案?”

在这种情况下,问题在于您有length数字要查看,但不允许循环。那么,您如何length用较小的异或来表示大小的异或,以及一些不需要循环的工作?

[编辑:等一下,再看看你的问题,你说你已经对异或进行了排序,所以我猜你已经这样做了。在那种情况下,我上面的评论是你唯一需要知道的:你已经完成了。C中的anint不是十进制值,它只是一个值。您无需将任何内容转换为十进制即可将其存储或返回到int.

不过,如果您有兴趣,我可以发布使用递归函数将 int 转换为十进制值的代码。一种简单的方法是通过与 10 的越来越大的幂进行比较来计算“向下”需要多少位数,然后在返回“向上”的路上从末尾开始打印数字。]

于 2009-11-30T18:03:23.713 回答
2

这是一个标准的递归问题。诀窍是要意识到一个由 1 和 0 组成的字符串后跟 1 或 0 的整数值是 2 * 字符串的整数值加上数字的值。

所以你会想做类似的事情

if( length <= 0) return 0;

return 2 * binaryXOR(firstnumber, secondnumber, length - 1) + (firstnumber[length - 1] ^ secondnumber[length - 1]);
于 2009-11-30T18:08:26.973 回答
0

可以使用递归函数调用来代替循环。

于 2009-11-30T18:02:39.963 回答