java中的fun(agr ++)vs fun(arg + 1)

时间:2016-05-26 03:32:41

标签: java string recursion stack-overflow

我试图使用递归来反转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--的值不会传递给函数。

1 个答案:

答案 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写入开始和结束值以反向方法控制台,则检查变量面板中的开始和结束值