Java:简单递归问题

时间:2015-10-23 20:11:45

标签: java if-statement recursion char return

我对递归的整个想法非常陌生,而且说实话,这让我有点头脑。我正在尝试将这个函数转换成递归的函数...

public static int to_number(String s)
{
    int total = 0;
    int n=s.length();
    for(int i = 0 ; i < n ; i++) { 
        char c = s.charAt(i);
        if (Character.isDigit(c)){
            int value=Character.getNumericValue(c);
            total +=value;
        }
    }
    System.out.println(total);
    return total;
}

它读入一个字符串,例如“3aaa6a3”,遍历字符串,如果char是一个数字,它将它添加到总数,依此类推。我到目前为止......

    public static int to_number(String s)
{
    int total = 0;
    int n=s.length();
    int i=0;
    if (i == n){
        return 0; //if gone through the whole string
    }
    char c = s.charAt(i);
        if (Character.isDigit(c)){
            int value=Character.getNumericValue(c);
            total +=value;
        }

    System.out.println(total);
    i++;
    to_number(); //trying to call the same function
    return total;
}

我觉得我很亲近,但是没有得到它。感谢您的时间和精力!

3 个答案:

答案 0 :(得分:1)

不会给你代码,但作为一个递归函数,你想要处理输入字符串的第一个字符,然后用剩余的字符串,即to_number(s.substring(1))调用自己,并结合结果。当输入字符串为空时,递归结束。

答案 1 :(得分:0)

试试这个

public void intToNum(String s, int total[])
{

     if(s.isEmpty())
        return;

     char c = s.charAt(0);

if (Character.isDigit(c)){
            int value=Character.getNumericValue(c);
            total[0] +=value;
        }

intToNum(s.substring(1),total);

}

并在您的主体中,将该功能称为

int [] total = new int[1];

intToNum(input,total);

System.out.println(total[0]);

或其他方法

public int intToNum(String s)     {

     if(s.isEmpty())
        return 0;

     char c = s.charAt(0);

if (Character.isDigit(c)){

            int value=Character.getNumericValue(c);

            return value + intToNum(s.substring(1));
        }

return intToNum(s.substring(1));

}

答案 2 :(得分:0)

这个答案包含解决方案。当你被卡住时,只要看看它。我还鼓励您阅读并理解代码,而不是仅仅复制代码。 这是编程中最重要的概念之一,因此请确保您理解并熟悉它。:)

工作原理:该方法接收一个字符串。如果字符串长于1个字符,则该方法将其分成两半,在两个子字符串上调用自身并添加两个结果。这些调用将执行相同的操作,直到字符串片段只有1(或0)个字符长。在这种情况下,它只返回它们的值(如果没有值,则返回0)。

public MemoryStream d()
{
    using (MemoryStream ms = new MemoryStream())
    {
        return ms;
    }
}