public static void main(String[] args)
{
String string="HelloWorld";
char ch = string.charAt(string.length()-1);
maximum(string,ch,string.length()-2);
}
public static void maximum(String string,char ch,int length)
{
if(length==0)
return;
System.out.println(ch);
maximum(string,string.charAt(length),length-1);
}
打印
d
l
r
o
w
o
l
l
而不是
d
l
r
o
w
o
l
l
e
h
为什么?
答案 0 :(得分:4)
这里做递归不是你应该做的事情。但是,假设这是一个学习练习,我在这里看到两个问题:
ch
总是落后于索引。可能会做类似的事情:
public static void main(String[] args)
{
String string="HelloWorld";
maximum(string, string.length()-1);
}
public static void maximum(String string, int length)
{
System.out.println(string.charAt(length))
if(length==0)
return;
maximum(string, length-1);
}
答案 1 :(得分:2)
这是一个逻辑问题,而不是代码问题。首先,我建议在每次递归时打印出长度值。这将有希望揭示问题。您甚至可以手动执行此操作并查看问题。
总的来说,您对变量length
的处理方式不一致。在递归之前,您正确地减去1以获得最后一个字符的从零开始的索引位置。但是,当你开始递归时,你将length
减少2,即使你从末尾只检索了1个字符。在那里,您将length
的含义更改为意味着最后一个位置而不是剩余字符串的长度。但是在maximum()
里面,你把它当作代码的一部分中的字符串长度,就像另一部分中的最后一个位置一样。
无论哪种方式,您都需要更改maximum()
中的代码以一致地处理变量。根据您选择的含义,您可能需要将最初发送的参数值更改为maximum()
。