0

いくつかのコメント行でこれらの方法を説明できる人はいますか。それらは数を二乗するためのものです。1つは再帰、実装を使用しており、もう1つは普通です

 public static int sq(int n)
{
    int i = 0 ;
    int result = 0 ;

    while(i < n){         
        result = result + 2*i + 1 ;
        i = i + 1 ;
    }
    return result ;
}

public static int recSq(int n)
{
    if(n == 0){
        return 0 ;
    } else {
        return recSq(n - 1) + 2*(n - 1) + 1 ;
    }
}

public static int implementSq(int n)
{
    int i ;
    int result = 0 ;

    for(i = 0 ; i < n ; i++){
        result = result + 2*i + 1 ;       
    }
    return result ;
} 
4

3 に答える 3

1

これは宿題の練習に違いないと思います。そうでなければ、何をするにも非常識な方法です。したがって、統合開発環境 (Netbeans など) を使用し、それを使用してコードを 1 行ずつステップ実行することをお勧めします。これは、コードの動作を理解する最も簡単な方法です。私たちがあなたに言うだけでは、あなたはそれによって何も得られません.

于 2013-04-25T10:19:20.877 に答える
0
  • 最初のものは、ループを使用して数値を 2 n 回乗算し、ローカル変数 i を増やします。
  • 2 つ目はまったく同じことを行っていますが、再帰を使用しています。各ステップで n が減少し、最後のケースでは 0 が返されます。すべての呼び出しは、パラメーター値 0 以外の異なるパラメーターを使用して同じ関数を再度呼び出しているため、関数は 0 を返します。

例: recSq(2)

  4 recSq(2)
  |<- 1  reqSq(1)+2*1+1
      |<-0  reqSq(0)+2*0 + 1
         |<-  0

reqSq(2) が呼び出されるので、if を評価し、return ステートメントの評価を開始します。最初の操作は、n = 2 として reqSq(n-1) へのメソッド呼び出しであり、次に reqSq(1) を呼び出します。

reqSq(1) が呼び出されるので、if を評価し、return ステートメントの評価を開始します。最初の操作は、n = 1 として reqSq(n-1) へのメソッド呼び出しであり、次に reqSq(0) を呼び出します。

reqSq(0) が呼び出されるので、if を評価します。これは true であり、原因は n ==0 であり、0 を返します。

reqSq(1) 呼び出しは reqSq(0) の評価を終了し、残りの計算を続行できます 0 + 2*(n-1) + 1 -> 0 + 0 + 1. 値 1 を返します。

reqSq(2) は reqSq(1) の評価を終了し、残りの 1 + 2*(n-1) +1 -> 1 + 2 + 1 の計算を続行できます。値 4 を返します。

  • 最後のループは for ループで、実質的には最初のループと同じですが、while ループの代わりに fors を使用しています。for ループでは、初期化条件、継続条件、および増加操作を 1 行で宣言します。したがって、for ループが値 0 で始まる場合、ループは i < n として継続し、ループの最後で "i++" が呼び出されます。
于 2013-04-25T10:15:02.573 に答える