开发者

why is this an infinite loop in python?

I can't seem to figure out why this is an infinite loop in python??

for i in range(n):
    j=1
    while((i*j)<n):
       j+=1

shouldn't the outer loop go n times. incrementing j until开发者_Python百科 its equal to n div i each time?


i starts at 0, so the while condition stays always true; see the range docs for details.


You can create a "trace" showing the state changes of the variables.

  1. n= 5; i= 0
  2. n= 5; i= 0; j= 1
  3. i*j < n -> 0 < 5: n= 5; i= 0; j= 2
  4. i*j < n -> 0 < 5: n= 5; i= 0; j= 3
  5. i*j < n -> 0 < 5: n= 5; i= 0; j= 4
  6. i*j < n -> 0 < 5: n= 5; i= 0; j= 5
  7. i*j < n -> 0 < 5: n= 5; i= 0; j= 6

etc.

You can prove that your trace is correct by inserting print statements.

When in doubt, print it out.


i starts at zero, so the condition for the inner loop is always 0*j < n, which will always be true.


Because the initial value of i is 0.


The first value in i will be 0. 0 times anything is 0.


because i is 0!! and i*j=0


range(n) starts at 0, not 1. 0 * j will always be less than n.


On the first time through the outer loop, the inner loop becomes an infinite loop. It doesn't matter what happens after that. There's no "after infinity".


i is 0 rewrite you loop like

for i in range(1,n):
j=1
while((i*j)<n):
   j+=1

using this version of the range function will create a range that starts at 1 instead of 0

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜