【问题标题】:How to reverse string using recursive? [closed]如何使用递归反转字符串? [关闭]
【发布时间】:2019-08-09 14:38:25
【问题描述】:

如何将此方法转换为递归方法?我无法定义基本条件和结束条件。如何减少或增加结束条件以满足基本条件?

private string ReverseString(string s)
    {
        char[] array = new char[s.Length];
        int index = 0;
        for (int i = s.Length - 1; i >= 0; i--)
        {
            array[index++] = s[i];
        }
        return new string(array);
    }

使用字符串生成器

     private string ReverseLetter(string letter)
    {            //copy to stack           
        Stack<char> stack = new Stack<char>();
        foreach (char ch in letter)
            stack.Push(ch);
        //read the stack into a string          
        StringBuilder sb = new StringBuilder(10);
        while (stack.Count > 0)
        {
            sb.Append(stack.Pop());
        }

        return sb.ToString();
      }

【问题讨论】:

  • 你有什么理由不使用 stringbuilder 吗?
  • 我能理解这个问题是作业还是什么,否则,递归不是一个“好”的方法。
  • 是的,这是我必须做的任务。我确实有一个字符串生成器方法,我发布的方法让我更容易理解。
  • 你对递归了解多少?只需要几件事:1.返回具体值的“基本”案例,2.处理更大问题并使其更小的方法(这成为递归调用)。例如,要获取数字列表的总和,您可以删除一个数字并将其添加到从较小列表中获取总和的递归调用的结果中。基本情况是列表包含一个项目,而您只需返回该项目。
  • 多么愚蠢的任务。字符串是一种线性数据结构,用递归来处理它是完全错误的。递归最适合嵌套数据结构。 “正确”的解决方案是拒绝分配。

标签: c# arrays string recursion reverse


【解决方案1】:

如果你想使用递归方法,为什么要在其中使用循环...?

我写了一个简单的方法,它使用递归返回反向字符串。

public string ReverseString(string s)
    {
        if (s == null || s.Length <= 1)  // if length is less or equal 1 then also returns
            return s;

        return ReverseString(s.Substring(1)) + s[0];
    }

附加输出示例:

【讨论】:

  • 小心s.Length == 1。如果我提供 空字符串 "", null 字符串作为参数怎么办?
  • @DmitryBychenko ,是的,必须检查所有可能的值 :)
猜你喜欢
  • 1970-01-01
  • 2016-03-05
  • 2017-07-20
  • 2013-04-13
  • 2014-02-22
  • 2011-07-28
  • 2015-09-27
相关资源
最近更新 更多