递归可以这么解释:
在 某一步reverse 中,源串 reverse(str[0......n]) 变为 str[1....n]+str[0]; 下次递归 str[1....n] 变为 str[2....n]+str[1]....最后在全部返回其中 reverse 为上面定义的函数 。 所以递归下去 结果显而易见。
在 某一步reverse 中,源串 reverse(str[0......n]) 变为 str[1....n]+str[0]; 下次递归 str[1....n] 变为 str[2....n]+str[1]....最后在全部返回其中 reverse 为上面定义的函数 。 所以递归下去 结果显而易见。
* 把字符串做倒序排列
* @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;
}
每次都从第一个字符开始截取,然后把当前的最后一个字符拼接在最后
拿到最后,就全部反转了
每次取str.charAt(0),就是字符串的第一个加到整个串后面。
而且他每次穿进的参数时str.substring(1),就是第二个开取,取道最后一位str.substring(1)=="",,即str.length==0,所以会进入if判断跳出递归。