7

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 its equal to n div i each time?

9 Answers 9

35

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

Sign up to request clarification or add additional context in comments.

Comments

16

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.

1 Comment

and use the logging module in bigger programs. You need to modify just one line to change the verbosity
12

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

Comments

7

Because the initial value of i is 0.

Comments

4

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

Comments

2

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

Comments

2

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

Comments

1

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".

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.