递归方法构造

时间:2010-11-08 00:14:22

标签: java eclipse recursion

这是我的问题:

  

编写一个名为binaryToDecimal的递归方法。该方法应将二进制位串转换为基数10整数。来自RecursionExamples类的对象的示例调用将是

answer = example.binaryToDecimal("101111")
     

返回的整数为47。

我需要帮助来解决这个问题。我知道这将是一个if-else循环,但是如何解决这个问题让我难以置信。 (这是日食环境)。

3 个答案:

答案 0 :(得分: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

您还必须检查字符串的其余部分何时减少为结束条件,但这是该方法的基本逻辑。

答案 1 :(得分:1)

您想要做的很简单:

  1. 考虑退出条件 - 它可以处理的最原子串是什么。如果您的方法在空字符串上返回适当的错误,则会获得奖励。
  2. 考虑如何使用递归函数。如果忽略用于提取lastDigit和restOfString的代码,Reese已经发布了一个很好的解决方案。
  3. 这是一个更像Java的伪代码,没有透露太多:

        public int binToDec(String binary)
        {
            if (end_conditions) return int
            int lastDigit = Integer.process
            String restOfString = binary.substring
    
            return lastDigit + 2* binToDec(restOfString);
        }  
    

答案 2 :(得分: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))
  }
}