2010-11-08 2 views
0

Вот моя проблема:Рекурсивный метод строительства

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

answer = example.binaryToDecimal("101111") 

Целочисленного вернулся бы 47.

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

+6

Вы должны показать, что вы пробовали до сих пор. Кроме того, «Я знаю, что это будет цикл for-else ...» Наверное, нет, если он должен быть рекурсивным. –

ответ

1

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

  1. Think условий выхода - то, что является наиболее атомной строкой может обрабатывать. Бонусные баллы, если ваши методы возвращают соответствующую ошибку в пустой строке.
  2. Подумайте, как использовать рекурсивные функции. Reese уже опубликовал хорошее решение, если вы игнорируете код, используемый для извлечения 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); 
    } 
+0

оцените помощь, вы оба. эти рекурсивные методы bug me –

2

Если вы хотите рекурсивно решить эту проблему, считайте, что для двоичной строки вы можете преобразовать ее в целое число, добавив 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 

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

+0

Я не совсем уверен, как использовать это в моем методе. –

+0

Как это сделать? Это метод, который вы пытаетесь написать, просто, что он находится в псевдокоде, а не в java, и вы хотите, чтобы строка ввода была не целой, поэтому либо конвертируйте ее в число, либо используйте метод 'substring'' String' для достижения того же семантические цели. –

+0

Я расскажу, что я придумал в кратчайшие сроки –

1
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)) 
    } 
} 
+0

Я собирался указать, что предоставление рабочего решения для домашнего задания - плохая форма. Затем я посмотрел на код. :-) –

+0

Спасибо за подсказку. :) –

Смежные вопросы