2016-12-04 7 views
-2
class Rec 
{ 
    public int pattern(int n) 
    { 
     if(n>=1) 
     return pattern(n-5); 
     else 
     return pattern(n+5); 
    } 
    public static void main(String args[]) 
    { 
     int a=16; 
     Rec ob=new Rec(); 
     System.out.print("16\t"+ob.pattern(a)); 
    } 
} 

上記は正常にコンパイルが、任意の出力を与えるものではありません私のコードです。パターンを印刷する方法16 11 6 1 -4 1 6 11 16 Javaで再帰を使用しますか?

+1

質問は何ですか?何がうまくいかない?このサイトを効果的に使用する方法については、[help]にアクセスして[ask]をお読みください。あなたのコードを見て、実際にどこに何が印刷されているのか自分自身に尋ねます。 –

+0

"出力が得られません"?それは 'StackOverflowError'例外をスローしていませんか? – YoungSpice

+0

すべての再帰的メソッドには、メソッドの繰り返し呼び出しからエスケープするための "基本ケース"が必要です。 –

答えて

1

あなたのコードにはエスケープ手段がありません。言い換えれば、何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も同じことを繰り返すだけですしたがって、これが起こらないようにするには、おそらくクラスレベルの変数を作成し、メソッドが呼び出されるたびにその変数をインクリメントし、メソッド内でその変数がしかし、これはあなたに別の問題を残します。あなたのパターンメソッドは1つの整数だけを返します。つまり、出力されるものはすべて16であり、メソッドのすべての呼び出しの最終結果です。これを修正するには、printlnステートメントをパターンメソッドの中に入れるか、パターンメソッドを設定して、代わりに整数のStringを返し、それを印刷することができます。

0

変更パターン関数は再帰的に途切れないので、パターン関数は変更されません。 nの値が何であれ、関数はそれ自身を呼び出します。したがって、出力がなければ、パターン関数の呼び出しが行われます。あなたはこれを試すことができ 一つのこと:

public int pattern(int n) 
{ 
    if(n>=-4){ 
     System.out.print(""+n+"\t"); 
     pattern(n-5); 
     if(n!=-4)System.out.print(""+n + "\t"); 
    } 
    return 0; 
} 

出力: 16 11 6 1 -4 1 6 11 16

関連する問題