1. ホーム
  2. c

[解決済み】不完全な入れ子ループにおける最内周ループとは?

2022-01-27 07:06:32

質問

Helo、不完全にネストされたループの場合の内部ループの定義について、少し混乱しています。以下のコードを考えてみてください。

for (i = 0; i < n; ++i)
{
   for (j = 0; j <= i - 1; ++j)
        /*some statement*/
    p[i] = 1.0 / sqrt (x);
   for (j = i + 1; j < n; ++j)
   {
       x = a[i][j];
       for (k = 0; k <= i - 1; ++k)
          /*some statement*/
       a[j][i] = x * p[i];
   }
}

ここでは、同じネストレベルのループが2つあります。しかし、j+1 から始まる "j" を反復する2番目のループでは、再び別のネスティングレベルが存在します。ループ構造全体から見て、このコードで最も内側のループはどれでしょうか?

どのように解決するのですか?

笑)どう説明したらいいのかわからないので、ベストショットをお見せします。 debugger これは、あなたが知らないうちに、あなたを助けるかもしれません。

for (i = 0; i < n; ++i)
{
   //Goes in here first.. i = 0..
   for (j = 0; j <= i - 1; ++j) {
        //Goes here second..
        //Goes inside here and gets stuck until j is greater then (i- 1) (right now i = 0)
        //So (i-1) = -1 so it does this only once.
        /*some statement*/
    p[i] = 1.0 / sqrt (x);
   }
   for (j = i + 1; j < n; ++j)
   {
      //Goes sixth here.. etc.. .. 
      //when this is done.. goes to loop for (i = 0; i < n; ++i)

      //Goes here third and gets stuck
      //j = i which is 0 + 1.. so, j == 1
      //keeps looping inside this loop until j is greater then n.. idk what is n..
      //Can stay here until it hits n.. which could be a while.
       x = a[i][j];
       for (k = 0; k <= i - 1; ++k) {
           //Goes in here fourth until k > (i-1).. i is still 0..
           //So (i-1) = -1 so it does this only once
          /*some statement*/
       a[j][i] = x * p[i];
      }
      //Goes here fifth.. which goes.... to this same loop!
   }
}