2017-11-25 28 views
-4

私はどのように私は直接答えをしたくないのか分からない。 事前に感謝します。我々は、文字列 にn-1個のインデックスから印刷してある文字列内の最初のインデックス[0]でそれを終了するサブストリング使用再帰的な文字列C#

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Enter a word or sentence to be reversed: "); 
     string str = Console.ReadLine(); 
     Console.WriteLine("**********"); 
     Console.WriteLine("Your input is: "); 
     Console.WriteLine(str); 
     Console.ReadLine();//to give a little bit space between the outputs 
     Console.WriteLine("************"); 
     Console.WriteLine("And it will be reversed as : "); 
     //call the Recursive Function in the class Recursive 
     str = Recursive.Recursive_Func(str); 
     Console.WriteLine(str); 
     Console.ReadLine(); 
    } 
} 


class Recursive 
{ 
    public static string Recursive_Func(string str) 
    { 
     if (str.Length <= 1) //the program base case 
     { 
      return str; 
     } 
     else 
     { 
      return Recursive_Func(str.Substring(1)) + str[0]; 
     } 
    } 
} 
+0

通常1が、質問はどのように「であると推測することができます私は壊れたプログラムを修正するのですか? "私がここで言うことができる限り、プログラムは正しいです。再帰を使用して文字列を反転します。あなたの実際の質問は何ですか?どのようにあなたは*何*ことができますか? –

+1

これを見てください:[文字列を逆転させる最善の方法](https://stackoverflow.com/questions/228038/best-way-to-reverse-a-string) – Jimi

答えて

0

あなたの実装では、ナイーブと遅いですが、それは再帰的であり、それは動作します。以下の実装は、char配列に文字列を変換しその場で文字を逆にする再帰的ヘルパーメソッドを使用し、バック文字列に逆の配列を変換します

class Recursive 
{ 
    public static string StrRev(string s) 
    { 
     if (string.IsNullOrEmpty(s)) return s; 
     var a = s.ToCharArray(); 
     return new string(CharArrRev(a, 0, a.Length - 1)); 
    } 

    private static char[] CharArrRev(char[] a, int i, int j) 
    { 
     if (i >= j) return a; 
     var c = a[i]; a[i] = a[j]; a[j] = c; 
     return CharArrRev(a, i + 1, j - 1); 
    } 
} 
関連する問題