递归是在方法内部重复使用自己的一种实践。在这种情况下,我将提供一个解决方案来说明发生了什么:
public static String chrToLast(String str, char ch) {
if(str.length() < 1) {
return "";
}
String newString = str.substring(1);
if(str.indexOf(ch) == 0) {
return chrToLast(newString, ch) + ch;
} else {
return str.charAt(0) + chrToLast(newString, ch);
}
}
如果您执行以下操作:
chrToLast("Hello, World!", 'l')
这将产生所需的结果:
Heo, Word! lll
过程
通常情况下,这种方法是通过检查给定字符串中当前第一个字符来确定要做什么的。如果第一个字符与您要寻找的字符相同(
l
),则会从字符串中删除该字符并对
新字符串使用
chrToLast
。但是,它还通过使用
+ ch
将找到的字符添加到结果的末尾。它继续执行此操作直到没有更多字符为止,这就是
结束条件。
结束条件
结束条件返回空字符串
""
,因为它是算法的
基本情况。您可以将递归算法视为调用自身解决问题的东西。通过调用自身,递归算法向
基数移动。在这个特定的例子中,它通过每次执行方法时减去一个字符来实现。一旦没有字符了,它就达到了基本情况,即
""
,其中字符串最终为空,无法再减去任何字符。(因此它作为最终状态而不返回任何值)
希望这回答了您的问题。理解这个概念很重要,因为它非常强大。尝试研究代码,如果有不清楚的地方,请发表评论。
还有一种可以帮助您的方法是在IDE中执行此代码并使用调试器来浏览其执行。然后您可以自己看到程序的流程,并查看所涉及变量的值。