我做一个C课程。 我需要做一个递归XOR二进制,但我有一定的局限性。 我不能使用环或任何math.h中的功能,也没有我可以调用来自XOR功能的另一功能。

这是函数原型:

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

其中firstnumber和secondnumber与1和0和长度相同的长度的阵列是它们的长度。

该函数应返回这两个阵列的XOR的十进制值。 这样做的XOR是很简单,但我怎样才能将其转换为与所有的限制十进制?

有帮助吗?

解决方案

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

所以,你会想要做类似

if( length <= 0) return 0;

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

其他提示

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

“我怎样才能表达一个小的问题方面的回答我的问题?”

在这种情况下,问题是,你已经length数字看,但你不能循环。那么,你如何在一个较小的XOR方面有一定量的工作,不需要环路表达大小int的XOR,一起?

[编辑:死守,只是看着你的问题又来了,你说你已经拥有的XOR排序,所以我想你已经做到了这一点。在这种情况下,我上面的评论是你需要知道的唯一的事情:你就完了。 C中的<=>是不是十进制值,它只是一个值。你不需要任何东西转换为十进制,以存储或在其返回<=>。

如果你有兴趣,虽然,我可以张贴的代码,它使用递归函数int型转换为十进制值。一个简单的方法是在路上工作了“下”有多少位是必需的,通过与10越做越大的权力比较,然后在回来的路上“向上”打印出的数字,从年底开始。

一个递归函数调用来代替循环的使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top