小编典典

递归将char移动到字符串的末尾

java

我需要获取一个字符串,并通过获取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;
        }
    }

谢谢您的帮助 :)


阅读 225

收藏
2020-11-30

共1个答案

小编典典

递归是在内部重用方法的实践。在这种情况下,我将提供一个解决方案来解释发生的情况:

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

处理

通常,此方法通过检查当前哪个字符是给定字符串中的第一个字符,然后确定要做什么来起作用。如果第一个字符与您要查找的(l)相同,则它将从字符串中删除该字符并chrToLast
新字符串上使用 。但是,它还会通过使用将找到的字符添加到结果的末尾+ ch。它将继续执行此操作,直到没有剩余的字符为止,这是 结束条件
的作用。

结束条件

结束条件返回一个空字符串,""因为这就是算法的 基本情况 。您可以将递归算法视为通过多次调用自身来解决问题的方法。通过调用自己,递归算法趋于
base
。在这种特殊情况下,它是通过每次执行该方法时从字符串中减去一个字符来实现的。一旦没有字符,它就会到达基本情况"",即字符串最终为空,并且不再可以减去任何字符。(因此,它不返回任何最终状态)

我希望这回答了你的问题。了解这一概念非常重要,因为它非常强大。尝试研究代码并注释一些不清楚的地方。

通过在IDE中执行此代码并使用调试器逐步执行该代码,也可以有所帮助。然后,您可以自己查看程序的流程,并查看正在运行的变量的值。

2020-11-30