使用递归将特定基数中的数字转换为十进制数

Mar*_*ria 4 java eclipse recursion

我的任务是创建一个递归方法makeDecimal,当传递一个数字(由String表示)及其基数时,将数字转换为基数10.您将需要使用该方法Integer.parseInt(str).(提示:使用子串.)此方法采用a String并返回它的整数形式.

例如,Integer.parseInt("21");将返回int 21.

以下是makeDecimal如何工作的一些示例:

makeDecimal("11", 2) 将返回3.

makeDecimal("100", 4) 将返回16.

这是我的尝试:

public static double makeDecimal(String number, int base){
    int len = number.length();
    double f = 0;

    if(len <= 0)
        return 0;
    else{
        makeDecimal(number,base);

        double temp = Integer.parseInt(number.substring(len - 1, len + 1));
        f = f + temp * Math.pow(3, len-1);
    }

    len--;
    return f;
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到"溢出错误",我不知道它是否写得正确.

Ted*_*opp 7

您正在使用与传入的完全相同的参数进行递归.因此,调用本身将以相同的方式递归,直到堆栈溢出.这不是递归应该如何工作的.相反,您需要弄清楚如何在当前调用中执行一个问题,然后递归以解决较小的问题.

在你的代码中,你甚至不清楚你正在使用什么逻辑.(计算3 len-1有什么意义?)试试这个:

  • 如果输入字符串的长度为0,则答案为0(您正确的那部分)
  • 否则,取最后一位数字并在当前基数中解析它.然后答案是该值加上base所有值的值乘以但不包括输入的最后一位数.(提示:这是使用递归的好地方.)

您应该能够将该描述转换为适当的方法调用和使用substring().

哦,还有一件事:这里没有理由使用double值.只需坚持使用int变量.你不需要Math.pow().