2016-06-28 12 views
0

私は方法rand2()をランダムにreturns 0 or 1持っています。再帰関数の基本ケースはいくつありますか?

私は同じ確率でrand2()return 0,1,2 を使用する方法 rand3()を作成しようとしています。

私は0,1の4つの組み合わせを考慮する再帰的な解決策を考え出しました。

私はこの機能を1つ以上の基本ケースで書いていますが、それがうまくいくことを願っています。

しかし、それは再帰的な機能は、複数の基本ケースを持つことはできませんようです。ここで

は私のコードです:私は

public static int rand3(){ 
     String str = ""; 
     str+= rand2(); 
     str+= rand2(); 
     System.out.println(str); 

     if(str=="00") 
      return 0; 
     else if(str=="11") 
      return 1; 
     else if(str=="01") 
      return 2;   
     else 
      return rand3(); 
    } 

何をしないのですか?

答えて

0

しかし、リクルティブ機能のように、複数の基本ケースを持つことはできません。

これは間違っています。再帰関数は、必要な数の基底を持つことができます。 (そして、いくつかの再帰関数は間違いなく1以上のものを必要とする。例えば、再帰的フィボナッチ関数。)の全てで

すべては、私はそれが動作することを期待して、1以上のベースケースで、この機能を書きました。

あなたはそれが機能しないと思いますか?


少し考えて、そのコードをリファクタリングして、1つのベースケースしかないようにすることができます。

ヒント:rand2()INTEGERを返します...、あなたは整数

+0

'rand2(上の加算と乗算を行うことができます)+ rand2();この方程式は、1 0 2 1が一意ではないことを示している。しかし、2 * rand2()+ rand2();これは0 1 2 3を与え、固有で適切な場合は 'if(randSum <3)return randSum;'になります。それはあなたが考えたことですか? –

+0

はい。それは私が何を示唆していたかです。 –

0

再帰が必要な理由はよくわかりません(もちろん、学問的なエクササイズでない限り)。 ifブロックをループ内にラップし、最初の3つの選択肢のいずれかでループから抜けて、4番目のループをループを再実行してください。

また、ループ内にstrの割り当てを含める必要があることに注意してください。

関連する問題