我正在做C课程。 我需要做一个递归的XOR二进制文件,但我有一些限制。 我不能使用循环或任何math.h函数,也不能从XOR函数调用另一个函数。
这是函数原型:
int binaryXor(int firstnumber[], int secondnumber[], int length);
其中firstnumber和secondnumber是长度相同的1s和0s的数组,长度是它们的长度。
该函数应返回这两个数组的XOR的十进制值。 执行XOR非常简单,但如何将其转换为带有所有限制的十进制?
答案 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)
可以使用递归函数调用代替循环。