我试图使用递归来反转String,如下所示。
但是当我调用reverse(arr,start++,end--)
时,它会给出stackoverflow错误
我尝试使用reverse(arr,start+1,end-1)
然后它运行正常。
public class Reverse {
public static void main(String[] args) {
char inp[] = "TestString".toCharArray();
int n = inp.length;
reverse(inp, 0,n-1);
System.out.println(String.valueOf(inp));
}
public static void reverse(char[] arr, int start, int end){
if(start>=end)
return ;
char tmp;
tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
reverse(arr,start+1,end-1);//error line
}
reverse(arr,start ++,end--)有什么问题? 我想知道为什么start ++和end--的值不会传递给函数。
答案 0 :(得分:1)
看看这个问题
SO post-increment-and-pre-increment-concept
发布
reverse(arr,start++,end--)
执行此操作时,递增/递减的值将不会传递给递归方法,这意味着您正在使用原始值start和end结果调用SO错误
预
当您执行reverse(arr,start+1,end-1)
或reverse(arr,++start,--end)
递增和递减的start和end值将传递给递归方法。
在Eclipse IDE中进行调试时,如果没有使用IDE写入开始和结束值以反向方法控制台,则检查变量面板中的开始和结束值