【问题标题】:Recursive function that converts integer to binary string?将整数转换为二进制字符串的递归函数?
【发布时间】:2017-07-11 11:16:22
【问题描述】:

所以我知道我将如何编写一个函数,该函数将简单地将转换器整数打印成二进制,如下所示:

private void convertBinary(int num) {

    if(num > 0){

        convertToBinary(num/2);

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

    }
}

但是,如果我想将它作为字符串返回,我不知道该怎么做,尤其是递归,因为如果我将字符串初始化为方法的开头,它将在每次递归调用期间重置字符串。

【问题讨论】:

  • 您首先将方法更改为返回String,然后在递归调用中捕获返回值。现在您从递归调用中获得了价值,您可以附加到它,而不是打印。一步一步地看看这会把你引向何方。
  • 这不是一个骗子(至少不是那样)——这是一个“帮助我学习递归”的问题。

标签: java recursion binary integer


【解决方案1】:

与其给你代码你可以复制/粘贴,我会解决一个类似的问题,你可以应用相同的技术。

这是递归打印“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 中的这个特定问题,用于学习目的。

【讨论】:

    【解决方案2】:

    建议 1:函数名 ... ConvertToBinary 与 ConvertBinary
    建议 2:您的结果将以这种方式还原(左侧的 lsb)
    建议 3:从转换中获取返回值并将其与 n%2 连接作为输出

    但你已经足够接近了。

    顺便说一句,这是出于某种教育目的吗?递归对于将某些内容转换为二进制文件的效率非常低:)

    【讨论】:

      【解决方案3】:
      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);
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-14
        • 2015-06-14
        • 2014-12-03
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多