문제

왜 이것이 파이썬의 무한 루프인지 알아낼 수없는 것 같습니다.

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

외부 루프는 N 번가되어서는 안됩니다. j가 매번 n div i와 동일 할 때까지 j를 증가 시킵니까?

도움이 되었습니까?

해결책

i 시작 0, 그래서 while 상태는 항상 사실입니다. 참조 레인지 문서 자세한 내용은.

다른 팁

변수의 상태 변경을 보여주는 "추적"을 만들 수 있습니다.

  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

등.

당신은 당신의 흔적이 삽입하여 추적이 정확하다는 것을 증명할 수 있습니다. print 진술.

의심스러운 경우 인쇄하십시오.

i 0에서 시작하므로 내부 루프 조건은 항상 0*j < n, 그것은 항상 사실입니다.

초기 값 때문에 i 0입니다.

첫 번째 가치 i 0 배는 0입니다. 0은 0입니다.

나는 0이기 때문에 !! 그리고 i*j = 0

range(n) 시작 0, 아니다 1. 0 * j 항상보다 작을 것입니다 n.

외부 루프를 통해 처음으로 내부 루프는 무한 루프가됩니다. 그 후에 무슨 일이 일어나는지는 중요하지 않습니다. "무한대"가 없습니다.

나는 0입니다

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

이 버전의 범위 기능을 사용하면 0 대신 1에서 시작하는 범위가 생성됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top