Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法使用递归反转字符串 publicstaticvoidmain(字符串参数[]){ 系统输出打印LN(反向限制(“His”); } 公共静态字符串反向限制(字符串s){ 如果(s.length()_Java_Recursion - Fatal编程技术网

Java 方法使用递归反转字符串 publicstaticvoidmain(字符串参数[]){ 系统输出打印LN(反向限制(“His”); } 公共静态字符串反向限制(字符串s){ 如果(s.length()

Java 方法使用递归反转字符串 publicstaticvoidmain(字符串参数[]){ 系统输出打印LN(反向限制(“His”); } 公共静态字符串反向限制(字符串s){ 如果(s.length(),java,recursion,Java,Recursion,这很简单 如果使用一个字符字符串调用您的方法,它将返回相同的字符串并停止。否则,它将删除最后一个要追加的第一个字符,并使用剩余的字符调用相同的方法 以His 这样就行了 由于字符串长度为3(>1),它从中提取H追加到最后一个,并使用is调用reverse方法 由于现在字符串长度是2(>1),它从中提取i追加到最后一个,并使用s调用reverse方法 现在字符串长度是1,因此它将返回s,递归将停止 最后,它将开始按照角色发生的方式添加角色,例如。 s+i+H 这样,它将以siH的形式返回最终输出

这很简单

如果使用一个字符字符串调用您的方法,它将返回相同的字符串并停止。否则,它将删除最后一个要追加的第一个字符,并使用剩余的字符调用相同的方法

His

这样就行了

  • 由于字符串长度为3(>1),它从中提取
    H
    追加到最后一个,并使用
    is
    调用reverse方法
  • 由于现在字符串长度是2(>1),它从中提取
    i
    追加到最后一个,并使用
    s
    调用reverse方法
  • 现在字符串长度是
    1
    ,因此它将返回
    s
    ,递归将停止
  • 最后,它将开始按照角色发生的方式添加角色,例如。 s+i+H
  • 这样,它将以
    siH
    的形式返回最终输出
  • 其他解释方式:

    public static void main(String args[]) {
        System.out.println(reverseString("His"));
    }
    
    public static String reverseString(String s) {
        if (s.length() <= 1) {
            return s;
        } else {
            char c = s.charAt(0);
            return reverseString(s.substring(1)) + c;
        }
    }
    

    希望这会有所帮助。

    在其中放入一些print语句,以查看何时使用哪些参数调用
    reversesetring
    方法。下面是您将得到的结果:

       reverse("His" ) ->  reverse("is" )+H -> ( reverse("s" )+i)+H -> (s+i)+H ->siH
    
    因此,每次函数递归时,它都会用
    s.substring(1)
    切掉第一个字符。然后,它会将切掉的第一个字符添加到反转该子字符串的结果的末尾。使用上述三个调用,如下所示:

    his
    is
    s
    
    请注意,最后一个case只返回一个字母“s”。这称为递归的基本case,每个递归函数都需要一个来返回结果

    如果将
    reverse(x)
    的结果替换为上述三个调用,则会得到以下结果:

    reverse(is) + h
    reverse(s) + i
    s
    

    这就是它的工作原理。要反转字符串,需要反转字母[1-n],然后在其末尾添加字母0。唯一的例外是反转一个单字母字符串,它只返回该单字母字符串本身。

    我认为理解这些类型的方法如何工作的最好方法是用一个简单的示例手动检查一次。让我们以字符串“abc”为例并考虑当我们调用

    时会发生什么
    si + h
    s + i
    s
    

    在第一次迭代中,我们考虑了<代码> E/<代码>块(因为<代码> abc”。长度()/代码>不小于或等于1)。

    reverseString("abc")
    
    这相当于

    reverseString("abc".substring(1)) + "abc".charAt(0)
    
    reverseString("bc".substring(1)) + "bc".charAt(0)
    

    现在我们必须考虑<代码> RealScRead(“BC”)< /代码>。再次,我们发现自己在<代码> E/Sux>块中,该方法将返回

    reverseString("bc") + 'a'
    
    这相当于

    reverseString("abc".substring(1)) + "abc".charAt(0)
    
    reverseString("bc".substring(1)) + "bc".charAt(0)
    
    显然,
    reverseString(“c”)
    就是
    “c”
    ——所以
    reverseString(“bc”)
    就是
    “cb”
    ,如上所述,这意味着
    reverseString(“abc”)
    就是
    “cb”+“a”
    ,这给了我们
    “cba”


    总而言之,我们基本上是这样做的:

    reverseString("c") + 'b'
    
    使用4个字符的字符串:

    reverse("abc")
    reverse("bc") + 'a'
    reverse("c") + 'b' + 'a'
    "cba" 
    

    Intrest函数我已经有几年没有使用java了,但它应该是这样工作的

    检查以确保我们正在反转的是多个字符,如果不是,则返回多个字符。 现在我们要做的是取第一个字符并将其移动到字符串的末尾,然后返回它前面的字符串的其余部分

    I在结尾,如果克劳斯要求返回完整字符串,则您的诗句将成为一个字符和第一个字符。:)

    现在我确信有更好的方法来解决这个函数。我确信java有一个反向字符串函数,如果你出于某种原因不得不自己做这样的事情。而且它可能不起作用。我是从memeory做的,我的java已经生锈了

    reverse("abcd")
    reverse("bcd") + 'a'
    reverse("cd") + 'b' + 'a'
    reverse("d") + 'c' + 'b' + 'a'
    "dcba" 
    

    假设您有一个字符串“Hello”,那么它将从左到右对该字符串执行递归

    字符c=s.charAt(0)

    返回反向限制(s.子串(1))+c

    1) 对于H

    c='H'

    返回反向限制(“ELLO”)+H

    2) 对于E

    3) 对于E

    c='E'

    返回反向限制(“LLO”)+E

    4) 为了我

    c='L'

    返回反向限制(“LO”)+L

    5) 为了我

    c='L'

    返回反向限制(“O”)+L


    6) 因为,子字符串可能你想告诉我们,你在哪里挣扎。你到底不明白什么?我想一步一步地了解reverseString()方法的工作原理。看到它真的很有帮助,顺便说一句,我使用递归反转字符串,因为我想了解递归是如何工作的,但是你的解释非常好。谢谢
    return S = 'O'