字符串反转的迭代算法!

hafizgoo 2014-09-23 05:13:01
  
public static String reverse(String str) {
if((null== str) || (str.length() <= 1)) {
return str;
}
return reverse(str.substring(1)) + str.charAt(0); }

跪求大神出来详细解释这段代码?
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2014-09-24
  • 打赏
  • 举报
回复
字符串稍微长一些,你这程序就要挂。
hafizgoo 2014-09-23
  • 打赏
  • 举报
回复
引用 2 楼 sgzlove 的回复:
/** * 把字符串做倒序排列 * @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; }
我开始也觉得应该是省略写了一个变量,原来如此!谢谢了!
bichir 2014-09-23
  • 打赏
  • 举报
回复
该写法叫递归调用, 每次取str.charAt(0),就是字符串的第一个加到整个串后面。 而且他每次穿进的参数时str.substring(1),就是第二个开取,取道最后一位str.substring(1)=="",,即str.length==0,所以会进入if判断跳出递归。
姜小白- 2014-09-23
  • 打赏
  • 举报
回复
return reverse(str.substring(1)) + str.charAt(0) 每次都从第一个字符开始截取,然后把当前的最后一个字符拼接在最后 拿到最后,就全部反转了
sgzlove 2014-09-23
  • 打赏
  • 举报
回复
/** * 把字符串做倒序排列 * @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; }
windsunmoon 2014-09-23
  • 打赏
  • 举报
回复
递归可以这么解释: 在 某一步reverse 中,源串 reverse(str[0......n]) 变为 str[1....n]+str[0]; 下次递归 str[1....n] 变为 str[2....n]+str[1] .... 最后在全部返回 其中 reverse 为上面定义的函数 。 所以递归下去 结果显而易见。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧