使用递归Java将十进制转换为二进制

时间:2012-04-05 18:01:34

标签: java recursion binary decimal

我试图简单地使用递归转换为Binary。我在return语句中遇到问题。这会编译,但在运行时会出现溢出错误。我不知道要返回什么(或者如果我的陈述是错误的)来防止此错误。

谢谢!

public static String convertToBinary(int number)
{
  if(number > 0)
    {
      convertToBinary(number / 2);
      convertToBinary((number % 2 ));
     }

   return convertToBinary((number));
}

14 个答案:

答案 0 :(得分:5)

你的问题是在数字/ 2和数字%2上调用convertToBinary我相信。这段代码对我来说很好,并没有你所拥有的那样:

import java.util.Scanner;

public class DecToBin {

public static void main(String[] args) {

    int input;
    Scanner scan = new Scanner(System.in);

    System.out.print("Enter number to convert to binary: ");
    input = scan.nextInt();
    convert(input);

}

public static void convert(int num) {
    if (num>0) {
        convert(num/2);
        System.out.print(num%2 + " ");
    }
}

}

答案 1 :(得分:4)

好吧,问题似乎是你实际上没有在递归方法中做任何事情。

在最基本的形式中,您的递归方法应包含:

  1. 一个或多个逃脱条件。
  2. 递归调用自身。
  3. (这是一个过于简化的视图,但现在就可以了。)

    问题是你错过了一些逃避条件来处理参数长一位的情况,也就是你不能再细分它了。

    您的代码的另一个问题是您没有对递归调用的结果做任何事情。你应该存储和连接它们。

    我建议你重新开始:编写一个首先转换单个位的方法(这将是非递归的),然后将递归添加到它。 (一般建议:不要害怕丢弃代码并从头开始。)

答案 2 :(得分:3)

假设这是作业,我会指出主要错误..

return convertToBinary((number));

返回应该返回一个值,而不是调用一个函数。这只会添加一个递归状态堆栈,导致溢出。尝试将之前调用的值保存到变量中并返回该值。

答案 3 :(得分:2)

答案 4 :(得分:1)

一旦number达到零,该方法将一次又一次地调用自己。最终return需要返回其他内容 - 比如字符串。话虽如此,我认为这种方法并不十分理想。

答案 5 :(得分:1)

尝试以下 - :

public static String dec2Bin(int num) {
    String result = ((num % 2 == 0) ? "0" : "1"); // expr

    if (abs(num) > 1) {
        result = dec2Bin(num / 2) + result;
    }

    return result;
}

答案 6 :(得分:0)

这样可行,但您必须从末尾打印

static void printBinary(int x){
     if(x==0)System.out.printf("%3d", x);
      else{
           System.out.printf("%3d",x%2);
           printBinary(x/2);
      }
}

答案 7 :(得分:0)

以下将以递归方式工作。如果number为负数,则会在结果中添加“ - ”作为前缀。

    void printBinary (int n) {
            if (n < 0) {         //base case
                System.out.print("-");
                printBinary(-n);
            } else if (n < 2) {    //base case
                System.out.print(n);
                return;
            } else {
                printBinary(n/2);   //recursive step
                int answer = n%2;   
                System.out.print(answer);
            }

        }

答案 8 :(得分:0)

class DecBin {
    static int convert(int i) {
        if (i > 0) {
            convert (i/2);
            System.out.println(i%2);
            return 0;
        } else {
            return 0;
        }
     }

    public static void main(String[]  args) {
        DecBin.convert(10);
    }
}

答案 9 :(得分:-1)

我尝试创建一个通用的子程序,它接受任何十进制整数&amp;将其转换为必需的BASE。

private Integer convertToBaseN(int num,int n, int pow)
{
    Integer r = num%n;

    if(num < n)
        return new Double((Math.pow(10, pow-1))*r.doubleValue()).intValue();

    return convertToBaseN(num/n, n,pow+1)+ 
            new Double(Math.pow(10, pow-1)*r.doubleValue()).intValue();
}

    num :- Decimal No you want to convert.
    n:- Base to which you want to convert ( n =2 in your case).
    pow = 1 (fixed);


    Input=> convertToBaseN(503,5, 1); Output=> 4003
    Input=> convertToBaseN(7,2, 1); Output=> 111

注意: - 它不适用于负数。

答案 10 :(得分:-1)

只需将(number / 2 * 10)的二进制转换添加到数字的其余部分:

int binary(int dec) {
    int remainder=dec%2;

    if (dec==1 || dec==0)
        return dec;
    else
        return remainder + (binary(dec/2)*10);
}

答案 11 :(得分:-1)

public class DecImalToBinary {
    public static String decimalToBinary(int num){
        StringBuilder sb= new StringBuilder();
        if (num <2){
            return ""+ num;
        }
        else{
            return (sb.append(num%2)) + decimalToBinary((num/2));           
        }
    }

    public static void main(String[] args){
        System.out.println(decimalToBinary(8));
    }
}

答案 12 :(得分:-1)

public String convertirABinario(int n){
    String b = "";
    if (n == 0 || n == 1){
      b = "" + n;
    }
    else{
      b = b + convertirABinario(n/2) + n%2;
    }
    return b;
}

答案 13 :(得分:-1)

这是我的解决方案:

 public static String binaerRec(int number)
{
    if (number > 1)
    {
        return binaerRec(number / 2) + number % 2;
    } else
    {
        return 1 + "";
    }
}

玩得开心