using System;
class RevStr {
public void displayRev(string str) {
if(str.Length > 0)
displayRev(str.Substring(1, str.Length-1));
else
return;
Console.Write(str[0]);
}
}
class MainClass {
public static void Main() {
string s = "this is a test";
RevStr rsOb = new RevStr();
Console.WriteLine("Original string: " + s);
Console.Write("Reversed string: ");
rsOb.displayRev(s);
Console.WriteLine();
} }
答案 0 :(得分:2)
由于递归调用是第一个,只要字符串具有内容,它将以少一个字符递归调用自身。一旦完全没有字符,调用就会一次打开一个字符。它向后打印,因为如果你采用调用堆栈(对于较小的字符串)
displayRev("test")
displayRev("est")
displayRev("st")
displayRev("t")
displayRev("") // unwinds here
因此,如果您查看每个字母的第一个字母并将其写下来,则变为tset,与测试相反。
答案 1 :(得分:1)
这是一个递归方法,可以打印反转的字符串。要打印字符串str
,首先打印str
而不翻转第一个字符(递归步骤),然后打印第一个字符。
例如,打印abcd
反转,打印bcd
反转dcb
,然后打印a
(第一个字符)。
答案 2 :(得分:1)
它抛出异常。
示例:
displayRev("bla");
displayRev("la");
displayRev("a");
//Now it gets an error
//The string.Length "a" is bigger than 0 (it´s 1)
//in displayRev(str.Substring(1, str.Length-1)); he wants to make a SubString beginning at the
//index 1 (the Second character), but the string contains only 1 character
//if-Statement have to look like:
if(str.Length > 1)
displayRev(str.Substring(1, str.Length-1));
else
return;
答案 3 :(得分:0)
考虑递归的最简单方法可能是Stack。实际上,如果您搜索Stack和递归,您将看到许多使用Stack实现递归的方法
在您的代码中,您实际上剥离了第一个字符,然后将剩余部分推入堆栈。当条件满足时,它需要“弹出”堆栈,它会对堆栈中的每个元素执行Console.Write()
语句。在你的情况下,它意味着它将打印被推入堆栈的字符串的第一个字符。请记住,堆栈是以LIFO(后进先出)顺序处理的,因此这会导致以相反的顺序处理字符串。
查看此链接是否有帮助:The Animation of Recursion, Simple String Reversal