2017-01-25 10 views

答えて

2

iが実際にデクリメントされ、iの値に影響を与えるステップは、の中にあり、ループボディに影響します。

第2の従来のバージョンでは、ループ本体が実行された後、条件が再度チェックされる前に、iがデクリメントされます。したがって、i == 1に対してループ本体が実行された後にiが0になります。条件が再度チェックされ、ループiが0の後にチェックされます。

チェックされる条件の一部として、ループ本体が実行される前に、最初のバージョンがiをデクリメントします。ここでループ本体は、最初にi == n - 1で実行され、最後の時刻はi == 0で実行されます。その後、iがデクリメントされ、その前の値が0と比較されます。ループが終了し、iが-1になります。

従来のバージョンでは、ループ本体には条件部分がチェックされたときと同じ値が常に表示されます。

+1

..ループ内では、「i」が最初に「n-1」であり、「i」が最後の反復「0」にある。ループの後、 'i'は' -1'です。 –

+0

@PaulOgilvie - うん、良い点。両方のバージョンに 'i'の最後の値を追加しました。 – StoryTeller

3

iは、の前に、のループボディが実行されます。 2番目のコードは、の後にiをデクリメントしてループ本体を実行します。

+0

私はあなたの答えが不完全であることを見つけました。それは、比較の中の「i」の振る舞い(値)について論じていないからです。 –

+0

@PaulOgilvieよく、比較のiの値は両方のケースで同じです。後置デクリメントとは、COMPARISONがデクリメントされる前の値であることを意味しますが、デクリメントがループの先頭にあるため、ループ内の「i」の値が異なります。 – Roddy

+0

@PaulOgilvie比較は同じです。両方のループが同じ値で_n_回繰り返されます。唯一の違いは、ループ内の 'i'の値です。 – rom1v

関連する問題