0

最近、プリミティブ操作の数え方を学び始め、プログラムの実行時間を見積もっています。しかし、for ループの動作のカウントに疑問を感じました。言う、for (int i=1; i<n; i++)

個人的には、 1 回、 n 回、合計で(i = 1)1 回と考えています。しかし、誰かが私に言った。は等しいので、回数を数えるべきです。(i < n)i++n-12ni++n-1i++i++i=i+12(n-1)

2回数えるのは正しいi++ですか?++メソッドを表すか、それとも演算子ですか?

4

6 に答える 6

2

このコードでは:

for (int i=1; i<n; i++)

ここでは であるインクリメントブロックはi++、すべての反復の最後に実行されるため、n-1 回実行されます。(n-1) 回目で終了条件が false となり、ループが終了します。

于 2013-10-22T14:41:52.103 に答える
1

1: ループは n-1 回です。これは、次のすべての「i」に対して実行されるためです。

[ 1, n ) == [ 1, n-1 ]

2: ++ は演算子です

于 2013-10-22T14:44:10.537 に答える
0

i++ は i = i+1 に等しいので、

  1. i+1 の計算

  2. 結果を i に設定する

全部で2ステップですが、2はただの定数なので大きなO/Omega表記を使っていれば問題ないはずです

于 2013-10-22T14:45:01.463 に答える
0

i++Javaでは単項演算子と呼ばれています。ただし、2 回カウントする必要があります。それは-最初に作成して追加-次に割り当てだからです。

于 2013-10-22T15:02:27.637 に答える
0

forloop を別の方法で考えてみましょう。

for(A,B,C)のように書くこともできます

A;
while(B){
...
C;
}

A は 1 回限りの初期化であり、ループが実行される前に行われます。

B は条件です。条件が成立している限り、ループは続きます

C は反復ごとに実行されます。たとえば、カウンターのインクリメント、i++ などです。

あなたの例では、ループは n-1 回実行されます i は 1 に初期化され、すべてのループが i の長さだけ実行された後にインクリメントされます

2 番目の部分: ++は演算子であり、等しくないi=i+1;

iiはインクリメントされますが、インクリメントされたものではなく、元の が返されます

++i実際に等しいでしょうi=i+1

于 2013-10-22T14:47:38.227 に答える
0
for (int i=1; i<n; i++)

このブロックでは、反復ごとに i++ が呼び出され、このコード ブロックのチェック ステートメントが含まれていますi<n。したがって、n回実行され、n回目はチェックステートメントに合格せずに終了します

于 2013-10-22T14:48:36.497 に答える