我对递归的整个想法非常陌生,而且说实话,这让我有点头脑。我正在尝试将这个函数转换成递归的函数...
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;
}
我觉得我很亲近,但是没有得到它。感谢您的时间和精力!
答案 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;
}
}