2017-02-21 70 views
0

Так что я знаю, как я бы идти о написании функции, которая будет просто распечатать конвертора целое число в двоичном так:Рекурсивная функция, которая преобразует целое число в двоичную строку?

private void convertBinary(int num) { 

    if(num > 0){ 

     convertToBinary(num/2); 

     System.out.print(num%2 + ""); 

    } 
} 

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

+3

Вы начинаете с изменения метода для возврата 'String', а затем возвращаете возвращаемое значение при рекурсивном вызове. Теперь, когда у вас есть значение из рекурсивного вызова, вы можете добавить его вместо печати. Посмотрите, к чему это приведет вас, шаг за шагом. – Andreas

+0

Возможный дубликат [Преобразование десятичных разрядов в двоичную Java] (http://stackoverflow.com/questions/14784630/converting-decimal-to-binary-java) – Prune

+0

Это не обман (по крайней мере, не тот) - это вопрос «помогите мне узнать рекурсию». – slim

ответ

0

Совет 1: имя функции ... ConvertToBinary против ConvertBinary
Совет 2: ваш результат будет возвращен этот путь (LSB слева)
Советы 3: получить возвращаемое значение из преобразования и конкатенации его с п% 2 как выход

Но вы достаточно близко.

BTW это для какой-то образовательной цели? Рекурсия довольно неэффективна для преобразования чего-то в двоичный :)

0

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

Вот версия рекурсивно печати 'A' n раз print:

void printTimes(int n) { 
     if(n > 0) { 
      printTimes(n-1); 
      System.out.print("A"); 
     } 
    } 

Теперь вот версия, которая возвращает String:

String stringTimes(int n) { 
     if(n > 0) { 
      return stringTimes(n-1) + "A"; 
     } else { 
      return ""; 
     } 
    } 

Это должно помочь вам написать свой метод toBinary.


Хотя это близко к оригиналу, я хотел бы быть последовательным в своих рекурсивных методов в обработке пункт завершающего первый, так что больше, как:

String stringTimes(int n) { 
     if(n == 0) { 
      return ""; 
     } 

     return stringTimes(n - 1) + "A"; 
    } 

Заметим, что рекурсия только соответствующая этой конкретной проблеме, в Java, для учебных целей.

0
class Class { 

    public static void main(String... args) { 
    System.out.println(intToBinary(1)); 
    System.out.println(intToBinary(8)); 
    System.out.println(intToBinary(15)); 
    System.out.println(intToBinary(1234567)); 
    } 

    private static String intToBinary(final int i) { 
    if (i == 0) { 
     return ""; 
    } else { 
     return intToBinary(i/2) + Integer.toString(i % 2); 
    } 
    } 
}