0

I am trying to simply convert to Binary with recursion. I am having problems with the return statement. This compiles but give an overflow error when run. I don't know what to return (or if my statement is wrong) to prevent this error.

Thanks!

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

   return convertToBinary((number));
}
4

14 回答 14

5

我相信你的问题是在 number/2 和 number%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 + " ");
    }
}

}
于 2012-04-05T18:09:30.127 回答
4

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

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

  1. 一种或多种逃逸条件。
  2. 递归调用自身。

(这是一个过于简单的观点,但现在可以了。)

问题是您缺少一些转义条件来处理参数为一位长的情况,即您无法再细分它。

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

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

于 2012-04-05T18:06:27.700 回答
3

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

return convertToBinary((number));

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

于 2012-04-05T18:06:05.890 回答
1

一旦number达到零,该方法将简单地一遍又一遍地调用自己。finalreturn需要返回别的东西——比如一个字符串。话虽如此,我认为这种方法并不是非常理想的。

于 2012-04-05T18:06:00.677 回答
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;
}
于 2017-06-29T04:36:55.720 回答
0

以下将递归工作。如果数字是负数,它将添加“-”作为结果的前缀。

    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);
            }

        }
于 2017-10-27T10:47:28.920 回答
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);
    }
}
于 2017-11-17T13:18:47.680 回答
0

这可行,但您必须从头开始打印

static void printBinary(int x){
     if(x==0)System.out.printf("%3d", x);
      else{
           System.out.printf("%3d",x%2);
           printBinary(x/2);
      }
}
于 2017-02-04T23:27:59.540 回答
-1

我试图创建一个通用子例程,它接受任何十进制整数并将其转换为所需的 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

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

于 2015-06-24T04:40:30.767 回答
-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));
    }
}
于 2016-06-08T13:46:17.170 回答
-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);
}
于 2016-06-06T00:44:04.467 回答
-1

这是我的解决方案:

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

玩得开心

于 2017-02-14T22:35:17.210 回答
-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;
}
于 2016-11-26T04:54:28.687 回答