Рекурсивная двоичная функция в десятичную без функции pow () или циклов

StackOverflow https://stackoverflow.com/questions/1821334

  •  10-07-2019
  •  | 
  •  

Вопрос

Я делаю курс C Мне нужно сделать рекурсивный двоичный файл XOR, но у меня есть некоторые ограничения. Я не могу использовать цикл или любые функции math.h, а также не могу вызвать другую функцию из функции XOR.

Это прототип функции:

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

где firstnumber и secondnumber - это массивы с одинаковой длиной 1 и 0, а length - их длина.

Функция должна возвращать десятичное значение 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 размера length в терминах меньшего xor вместе с некоторым объемом работы, который не требует цикла?

[Редактировать: подожди, просто снова посмотрел на твой вопрос, и ты сказал, что у тебя уже есть xor, так что, я думаю, ты уже сделал это В этом случае мой комментарий выше - единственное, что вам нужно знать: вы закончили. int в C - это не десятичное значение, это просто значение. Вам не нужно преобразовывать что-либо в десятичное число, чтобы сохранить или вернуть его в int .

Если вам интересно, я могу опубликовать код, который конвертирует int в десятичное значение, используя рекурсивную функцию. Один простой способ - потренироваться на пути «вниз». сколько цифр требуется, сравнивая с большими и большими степенями 10, а затем на обратном пути "вверх" печатать цифры начиная с конца.]

Вместо цикла можно использовать рекурсивный вызов функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top