JAVA:帮助修复递归函数
我必须使用递归来解决这个问题,我设法用循环很快地使它工作,但我有点被困在这个问题上。 我现在的代码是JAVA:帮助修复递归函数,java,recursion,Java,Recursion,我必须使用递归来解决这个问题,我设法用循环很快地使它工作,但我有点被困在这个问题上。 我现在的代码是 public static String ReverseR(String n){ String finalstring=""; int i = 0; int len = n.length(); while (i < len) { finalstring += (n.charAt(len - 1)); ReverseR(n.s
public static String ReverseR(String n){
String finalstring="";
int i = 0;
int len = n.length();
while (i < len) {
finalstring += (n.charAt(len - 1));
ReverseR(n.substring(0, len - 1));
i++;
}
return finalstring;
}
公共静态字符串反转器(字符串n){
字符串finalstring=“”;
int i=0;
int len=n.length();
而(我
当我输入任何字符串时,结果字符串的长度是正确的,但只使用最后一个字母。例如:反向器(“你好”)=ooooo
有什么想法吗?把n.charAt(len-1))
改成n.charAt(len-i))
你总是和len在同一个地方(1;)
[编辑]
while (i < len){
finalstring += (n.charAt(len - 1 - i));
ReverseR(n.substring(0, len - 1 - i));
i++;
}
while(i
这将修复您的代码,但是您必须在while
或反向器(…)
重复问题,检查此项将n.charAt(len-1))
更改为n.charAt(len-i))
你总是和len在同一个地方(1;)
[编辑]
while (i < len){
finalstring += (n.charAt(len - 1 - i));
ReverseR(n.substring(0, len - 1 - i));
i++;
}
while(i
这将修复您的代码,但是您必须在while
或反向器(…)
重复问题,检查这个递归类似于归纳法证明
递归有点像归纳法的证明
这里有一个完整的工作解决方案
public static String reverse(final String s) {
if (s == null) {
throw new NullPointerException();
}
final int length = s.length();
if (length <= 1) {
return s;
} else {
// s = start + lastChar
final String start = s.substring(0, length - 1);
final char lastChar = s.charAt(length - 1);
return lastChar + reverse(start);
}
}
公共静态字符串反转(最终字符串s){
如果(s==null){
抛出新的NullPointerException();
}
最终整数长度=s.长度();
如果(长度这里是一个完整的工作解决方案
public static String reverse(final String s) {
if (s == null) {
throw new NullPointerException();
}
final int length = s.length();
if (length <= 1) {
return s;
} else {
// s = start + lastChar
final String start = s.substring(0, length - 1);
final char lastChar = s.charAt(length - 1);
return lastChar + reverse(start);
}
}
公共静态字符串反转(最终字符串s){
如果(s==null){
抛出新的NullPointerException();
}
最终整数长度=s.长度();
if(length您的递归算法不需要任何循环,即while
和for
循环。任何循环构造基本上都可以通过递归实现,而无需接触循环。基本递归字符串反转的示例如下:
public static String reverseR(String n){
if (n.length() <= 1) return n;
return reverseR(n.substring(1))+n.charAt(0);
}
公共静态字符串反转器(字符串n){
如果(n.length()您的递归算法不需要任何循环,即while
和for
循环。任何循环构造基本上都可以通过递归实现,而不需要接触循环。基本递归字符串反转的示例如下:
public static String reverseR(String n){
if (n.length() <= 1) return n;
return reverseR(n.substring(1))+n.charAt(0);
}
公共静态字符串反转器(字符串n){
如果(n.length()检查此链接以获取递归帮助:使用循环或递归。不是两者都使用。检查此链接以获取递归帮助:使用循环或递归。不是两者都使用。虽然这确实解决了问题,但它不再需要递归:)(这可能是OPs作业所必需的)。这将抛出一个StringIndexOutOfBoundsException
虽然这确实解决了问题,但它消除了递归的需要:)(这可能是OPs作业所必需的)。这将抛出一个StringIndexOutOfBoundsException
还将“记住java中的字符串是不可变的,您需要返回修改后的字符串”“请记住,java中的字符串是不可变的,您需要返回修改后的字符串”从这里复制代码啊,很好的发现。看起来这是一种非常常见的方法!从这里复制代码啊,很好的发现。看起来这是一种非常常见的方法!