Рекурсивный метод построения - PullRequest
0 голосов
/ 08 ноября 2010

Вот моя проблема:

Напишите рекурсивный метод с именем binaryToDecimal. Метод должен преобразовывать двоичную строку битов в целое число 10. Пример вызова для объекта из нашего RecursionExamples класса будет

answer = example.binaryToDecimal("101111")

Возвращаемое целое число будет 47.

Мне нужна помощь, чтобы разобраться с этой проблемой. Я знаю, что это был бы цикл «если-то еще», но то, как это сделать, поражает меня. (Это среда затмения).

Ответы [ 3 ]

2 голосов
/ 08 ноября 2010

Если вы хотите решить это рекурсивно, учтите, что для двоичной строки вы можете преобразовать ее в целое число, добавив 1 или 0 на основе самого правого числа, добавив 2 раза эту функцию на основе остальной части строки.

Это будет выглядеть примерно так в псевдокоде

// input is an integer of 1's and 0's
def f( int binaryString ):
    int lastDigit = binaryString % 10 // Get the last digit
    int restOfString = binaryString / 10 // Remove the last digit

    return lastDigit + (2 * f(restOfString)) // add the last digit to twice f 
                                             // applied to the rest of the string

Вам также нужно будет проверить, когда остальная часть строки сводится к нулю как конечное условие, но этоОсновная логика для метода.

1 голос
/ 08 ноября 2010
int binaryToDecimal(String s){
  if (s.isEmpty() || Integer.parseInt(s)==0){  // It's a little weird because the only
    return 0;                                  //    argument is a String.  
  }
  else{
    int number = Integer.parseInt(s);
    int lastDigit = number % 10;
    int remainder = number \ 10;
    return lastDigit + 2 * binaryToDecimal(String.valueOf(remainder))
  }
}
1 голос
/ 08 ноября 2010

То, что вы хотите сделать, просто:

  1. Подумайте об условиях выхода - какую самую атомарную строку он может обработать.Бонусные баллы, если ваши методы возвращают соответствующую ошибку в пустой строке.
  2. Подумайте, как использовать ваши рекурсивные функции.Риз уже опубликовал хорошее решение, если вы игнорируете код, используемый для извлечения lastDigit и restOfString.

Вот более похожий на Java псевдокод, не раскрывая слишком много:

    public int binToDec(String binary)
    {
        if (end_conditions) return int
        int lastDigit = Integer.process
        String restOfString = binary.substring

        return lastDigit + 2* binToDec(restOfString);
    }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...