博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java面试题--如何用递归实现字符串反转
阅读量:6515 次
发布时间:2019-06-24

本文共 1587 字,大约阅读时间需要 5 分钟。

用递归实现字符串反转

题目描述:对一个字符串,如何用递归方式实现字符串的反转。如字符串:“123456”,用递归实现反转后,效果是“654321”。

思路:将字符串转换成字符数组,每次截取字符串的首字符放到最后,并再次对剩余字符串递归截取首字符,直到满足if条件(

originStr == null || originStr.length() <= 1)结束截取字符串操作。

 

递归实现字符串反转 完成代码如下:

public class Question39 {        public static void main(String[] args) {            System.out.println(reverse("123456"));        }                public static String reverse(String originStr) {            if(originStr == null || originStr.length() <= 1) {                return originStr;            }                                    return reverse(originStr.substring(1)) + originStr.charAt(0);        }}

亲测结果:

 

下面说一下递归调用的代码解析,也就是下面这行代码:

public static String reverse(String originStr) {            if(originStr == null || originStr.length() <= 1) {                return originStr;            }                return reverse(originStr.substring(1)) + originStr.charAt(0);        }
return reverse(originStr.substring(1)) + originStr.charAt(0);这行语句中,originStr.charAt(0)是将originStr这个字符串的 第一位拿出来; 而reverse(originStr.substring(1))中的originStr.substring(1)表示把originStr这个字符串的索引为1及之后的字符(也就是originStr字符串
的第二个字符以后的子串,即"23456")拿出来。所以,执行一次递归后,“123456”字符串被分解为“23456”+‘1’。 由于return reverse(originStr.substring(1)) + originStr.charAt(0);这行语句中,reverse方法的存在,执行第二次递归,此时 originStr=“23456”,所以执行完第二次递归后,“23456”分解为“3456”+‘2’。 ...依次类推,最后一次调用reverse方法时,也就是originStr = "6",可以看出字符串"6"满足if(originStr == null || originStr.length() <= 1)  中的第二个条件,所以执行if条件下的语句, 也就是返回originStr,即字符串"6"。所以整个调用栈就依次返回“6”+‘5’+‘4’+‘3’+‘2’+‘1’ = “654321”。 最后,控制台输出打印“654321”。

 

转载于:https://www.cnblogs.com/Qinstudy/p/10054802.html

你可能感兴趣的文章
day18:获取网卡IP地址|检查目录|下载文件|猜数字|根据名字得数字
查看>>
我的友情链接
查看>>
XMPP协议学习笔记一
查看>>
dom4j解析XML
查看>>
Oracle DBA课程系列笔记(12_1)
查看>>
mysql5.5源码编译安装详细步骤
查看>>
Oracle RAC Study之--Cache Fusion
查看>>
解决centos 6.6 更换yum 163源报错
查看>>
Dwz手册的补充说明和常见问题
查看>>
我的友情链接
查看>>
CentOS6 VNC服务安装配置
查看>>
VB.NET 写的一个文件转写工具(Aquilia)
查看>>
调整.NET控件WebBrowser的默认浏览器内核版本
查看>>
简单的雷电源代码
查看>>
cocos2dx学习笔记之Director(导演类)
查看>>
memcached之java客户端:spymemcached与spring整合
查看>>
如何写出精简的网页代码
查看>>
SqlServer日期函数
查看>>
Oracle查询表空间使用情况
查看>>
Linux inode满导致创建文件报磁盘空间不足
查看>>