2017-05-23 11 views
-4
void printarray(int i) { 
    if (i == 0) { 
     return; 
    } else { 
     printarray(i - 1); 
    } 
    System.out.println("[" + (i - 1) + "]" + values[i - 1]); 
} 

再帰を使用して配列を出力するプログラムです。誰でも私にどのように上記の方法が働くのか教えてもらえますか?再帰メソッドが配列の印刷にどのように役立つか

+7

デバッガ缶を返します。ペン&ペーパーテストをする。 'printarray(...) 'を呼び出すたびに別の用紙を使います。 – Turing85

+2

あなたはどういう意味ですか? –

+0

使用しているIDEにデバッガを接続し、各ステップを確認します。 –

答えて

1

このメソッドは、名前がvaluesのインスタンスまたはクラス変数でなければならない配列を出力します。

最初の指定インデックスは考慮されません。

方法は、最上位インデックスから始まり、1ずつデクリメントインデックスに自分自身を呼び出します。 インデックス0に達すると、これがリターンチェーンの開始点になります。 再帰呼び出しから戻ると、現在のインデックスの値がインデックスの後に出力されます。

1つのコールが次のコールに印刷されます。 行はインデックス0から始まり、インデックスi - 1(最初の呼び出しに使用されたインデックス)で停止します。

更新: @ Turing85のおかげで、私は印刷されたインデックスの自分自身の仮定を修正しました。

+2

@ Turing85私は1つの事を知りたいです。私は== 0最後の行に私がbeomesの値を返す1.am私は右??? –

+0

@arunodaysingh私はあなたの思考に従うことができません。 'return'に達すると、メソッドは直ちに中止されます。この時点から、上記の1つの呼び出しスタックが実行されます(おそらく 'printarray')。 Javaは常に値渡しであるため、このコールフレームには独自の(古い)値「i」があります。 – Turing85

+2

@ Turing85ご協力いただきありがとうございます。実際に私はvalue.iの呼び出しを忘れてしまった。最後の行がどのように始まったのか理解できなかった。あなたの意見で私は理解することができる。 –

0

例:I = 3 =>プリントアレイ(3)

  • elseブロックがアクティブである:プリントアレイ(2)
  • elseブロックがアクティブである:プリントアレイは、(1)
  • elseブロックがアクティブです。プリントアレイ(0)
  • ブロックがアクティブである場合、ので、私= 0と確かに
関連する問題