2017-05-03 21 views
-4

をしようとしているときに、私は、ユーザーがenterdたことが数で兆候「%」と「#」代替を表示する再帰関数を書くために私のコースでassanigmentを持っているヌル回し続けます。 だから私は、ユーザーが5番を入力した場合、結果は次のようになります: '%#%#%'。C#の文字列再帰関数を使用するよう

私が行った作業のほとんどを持っていると思います。私が現時点で持っている唯一の問題は、記号を表示しなければならない文字列が、その関数が行う各繰り返しで「null」になっているということです。

これは私のコードです:

public static string ShowGibrish(int num) 
{ 
    string s=""; 
    while (num!=0) 
    { 
     if (num % 2 == 0) 
     { 
      s = s+ "%"; 
      ShowGibrish(num - 1); 
     } 
     else if (num % 2 != 0) 
     { 
      s =s+ "#"; 
      return ShowGibrish(num - 1); 
     } 

    } 
    return s; 
} 

他の生徒は、文字列を表示するために作るためのStringBuilderを使用し、別のプライベート関数を使用し、公共の機能とそれを呼びました。しかし、私のコードも動作すると思う。

答えて

1

代わりにこれを試してみてください:

public static string ShowGibberish(int num) 
{ 
    if (num == 0) { return ""; } 
    else { 
     if (num % 2 == 0) {return "%" + ShowGibberish(num-1);} 
     else {return "#" + ShowGibberish(num-1);} 
    } 
} 

あなたのコードは、反復と再帰的なアプローチをミックス。これをきれいに解決するために、どちらか一方のみを使用してください。問題は、あなたのwhileループにあるよう

+0

あなたは正しいですが、これは彼らの宿題であるため、コードを提供する必要はありません。 –

+0

ShowGibrishは2つの異なる方法で綴られているかもしれません。 –

+0

@Alex Rosenfeldありがとう、それは私のコードのようではないが動作します! – Dolev

0

が見えます。何が起こっているのかは、スタック上の関数の各インスタンスが、ループの代わりにwhileループを実行しており、再帰によって単独で処理されているということです。関数の各インスタンスは、基底の場合!= 0の場合にのみ実行する必要があります。

変数はそれぞれの関数にスコープが設定されているため、コードの現在の状態では、ループは0

到達することはできません決して評価されている間、それは割り当てているので、申し訳ありませんが、私はあなたのためのコードを提供するつもりはありません。あなたが持っている

1

まず問題は、メソッドの開始時に新しい文字列を宣言することですが、あなたが連結からすべての進行状況を失う意味再帰関数にその文字列を運ぶことはありません。

第二の問題は、あなたが私の知る限り、そのここでは必要ありません知っているように、何らかの理由でwhileループを持っています。

  1. オプションのパラメータを関数string s = ""に追加します。
  2. whileループを削除する必要はありません
  3. 最初に行うべきことは、numが0かどうかを確認し、そうであればsを返します。
  4. 次に、あなたの奇数/偶数ロジック
  5. に基づく変更の再帰呼び出しShowGibrish(num - 1, s)

の結果を返す私は宿題の一部をキャッチしていないので、私はコードを削除しました。

+0

説明をいただきありがとうございます!私を信じて、何が起こったのか知らない。ある教師が一方的に教えると、他の先生はあなたに「いいえ、それはそうでなければならない」と言っています。彼らがもう何を望んでいるのかわかりません。 – Dolev

関連する問題