递归可以这么解释:
在 某一步reverse  中,源串  reverse(str[0......n])  变为   str[1....n]+str[0]; 下次递归 str[1....n] 变为 str[2....n]+str[1]....最后在全部返回其中 reverse 为上面定义的函数 。 所以递归下去 结果显而易见。

解决方案 »

  1.   

    /**
     * 把字符串做倒序排列
     * @param str
     * @return
     */
    public static String reverse(String str) {
    //判断是否字符串为空,如果为空则直接返回,终止递归
    if ((null == str) || (str.length() <= 1)) {
    return str;
    }
    //否则截取取字符串的第二位开始直到字符串末尾reverse(str.substring(1)) 与字符串的第一位拼接str.charAt(0)
    String temp =reverse(str.substring(1)) + str.charAt(0);
    return temp;
    }
      

  2.   

    return reverse(str.substring(1)) + str.charAt(0)
    每次都从第一个字符开始截取,然后把当前的最后一个字符拼接在最后
    拿到最后,就全部反转了
      

  3.   

    该写法叫递归调用,
    每次取str.charAt(0),就是字符串的第一个加到整个串后面。
    而且他每次穿进的参数时str.substring(1),就是第二个开取,取道最后一位str.substring(1)=="",,即str.length==0,所以会进入if判断跳出递归。