我需要获取一个字符串,并通过获取char来递归地重新排列它,并按该char的形式将字符串上的char移到末尾,例如“ Hello world!”。,’l’=>“ Heo word!lll”我在理解递归思维方式时遇到了问题,所以我从这里开始:
public static String ChToLast (String str, char ch){ if(str.indexOf(ch)== -1){ return str; }else{ if(str.indexOf(0) == ch){ return str; } }
谢谢您的帮助 :)
递归是在内部重用方法的实践。在这种情况下,我将提供一个解决方案来解释发生的情况:
public static String chrToLast(String str, char ch) { //This if statement details the end condition if(str.length() < 1) { return ""; } String newString = str.substring(1); //Create new string without first character if(str.indexOf(ch) == 0) { //This happens when your character is found return chrToLast(newString, ch) + ch; } else { //This happens with all other characters return str.charAt(0) + chrToLast(newString, ch); } }
如果执行:
chrToLast("Hello, World!", 'l')
这将产生所需的结果: Heo, Word!lll
Heo, Word!lll
处理
通常,此方法通过检查当前哪个字符是给定字符串中的第一个字符,然后确定要做什么来起作用。如果第一个字符与您要查找的(l)相同,则它将从字符串中删除该字符并chrToLast在 新字符串上使用 。但是,它还会通过使用将找到的字符添加到结果的末尾+ ch。它将继续执行此操作,直到没有剩余的字符为止,这是 结束条件 的作用。
l
chrToLast
+ ch
结束条件
结束条件返回一个空字符串,""因为这就是算法的 基本情况 。您可以将递归算法视为通过多次调用自身来解决问题的方法。通过调用自己,递归算法趋于 base 。在这种特殊情况下,它是通过每次执行该方法时从字符串中减去一个字符来实现的。一旦没有字符,它就会到达基本情况"",即字符串最终为空,并且不再可以减去任何字符。(因此,它不返回任何最终状态)
""
我希望这回答了你的问题。了解这一概念非常重要,因为它非常强大。尝试研究代码并注释一些不清楚的地方。
通过在IDE中执行此代码并使用调试器逐步执行该代码,也可以有所帮助。然后,您可以自己查看程序的流程,并查看正在运行的变量的值。