【问题标题】:Trying to reverse a string using recursion [duplicate]尝试使用递归反转字符串[重复]
【发布时间】:2021-01-30 16:10:37
【问题描述】:

我在使用递归反转字符串时遇到了麻烦 - 我对这个概念很陌生。

我正在用“hello”这个词测试我的代码。它只是在最后打印出'h',而不是我在递归期间试图建立的整个字符串。我知道使用字符串添加速度很慢,但我现在没有想过让它更快,因为它不起作用。

public class MyClass 
{
    public static void main(String[] args) {
        System.out.println(reversedString("hello", 0, ""));
    }
    
    public static String reversedString(String str, int index, String sb) {
        
        if(index == str.length()) {
            return null;
        }
       
        reversedString(str, index + 1, sb);
        sb = sb + str.charAt(index);
        return sb;
        
    }
}

【问题讨论】:

  • 谢谢,我已经看过了 - 我对我的具体实现有什么问题感到更加困惑 - 在我看来它应该可以工作,但它没有。
  • 你没有使用递归调用的返回值

标签: java string algorithm recursion


【解决方案1】:

这是对您上面发布的内容的轻微修改:

public static String reversedString(String str, int index, String sb) {
    if (index == str.length()) {
        return "";
    }

    sb = reversedString(str, index + 1, sb) + str.charAt(index);

    return sb;  
}

System.out.println(reversedString("hello", 0, "")); // prints olleh

这里的逻辑是,我们通过将递归的结果放在 first 中,将反向字符串连接在一起,然后是每个递归级别的单个字符。以这个顺序连接很关键,因为我们想要反转字符串,这在概念上意味着后面的字符需要首先出现。

基本情况发生在我们用完更多要处理的字符时。在这种情况下,我们只返回空字符串。

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 2014-06-10
    • 2017-07-20
    • 2011-07-28
    • 2015-09-27
    • 2017-06-11
    相关资源
    最近更新 更多