我在C#中有一个很好的谜语(我是初学者)。 我需要递归保留一个字符串(在一个方法中)。 我试过了:
public static void ReverseString(string str)
{
if(str.Length > 0)
{
char ch = str[str.Length-1];
ReverseString(str.Substring(0,str.Length-2));
Console.Write(ch);
}
}
但它不起作用。
我可以更改仅 if
的第2行中的文字。
(str[str.Length-1]
和str.Substring(0,str.Length-2)
)
我的错是什么? 感谢
答案 0 :(得分:8)
public static void ReverseString(string str)
{
if(!String.IsNullOrEmpty(str))
{
char ch = str[0];
ReverseString(str.Substring(1));
Console.Write(ch);
}
}
为了解释发生了什么,Console.Write
的最内部调用首先执行,因为递归最终成为字符串的结尾。然后当堆栈开始关闭时,它会打印早期的字符。
答案 1 :(得分:2)
看起来这个函数是以相反的顺序将字符串打印到控制台。在使用递归时,您应该首先假设函数执行它要做的事情并围绕它进行编码。确保使用较小的数据集完成任何递归调用。在这种情况下,一个较短的字符串。
public static void ReverseString(string str) // example str="cat"
{
if(str.Length > 0)
{
// grabs the last charactor "t"
char ch = str[str.Length-1];
// prints the first n-1 charactors in reverse order "ac"
ReverseString(str.Substring(0,str.Length-2));
// prints that last charactor "t" leads to "act"... not quite right
Console.Write(ch);
}
}
如果你不允许(为了练习)改变最后一行,你可以试试这个。
public static void ReverseString(string str) // example str="cat"
{
if(str.Length > 0)
{
// grabs the first charactor "c"
char ch = str[0];
// prints the last n-1 charactors in reverse order "ta"
ReverseString(str.Substring(1));
// prints that last charactor "c" leads to "tac"... Yeay!!
Console.Write(ch);
}
}