递归二进制到十进制函数没有pow()或循环

时间:2009-11-30 17:56:24

标签: c loops xor

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

这是函数原型:

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

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

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

3 个答案:

答案 0 :(得分:3)

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

“我如何根据较小的问题表达我的问题的答案?”

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

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

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

答案 1 :(得分:2)

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

所以你会想做像

这样的事情
if( length <= 0) return 0;

return 2 * binaryXOR(firstnumber, secondnumber, length - 1) + (firstnumber[length - 1] ^ secondnumber[length - 1]);

答案 2 :(得分:0)

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