이것이 왜 파이썬의 무한 루프입니까?
-
20-09-2019 - |
문제
왜 이것이 파이썬의 무한 루프인지 알아낼 수없는 것 같습니다.
for i in range(n):
j=1
while((i*j)<n):
j+=1
외부 루프는 N 번가되어서는 안됩니다. j가 매번 n div i와 동일 할 때까지 j를 증가 시킵니까?
해결책
i
시작 0
, 그래서 while
상태는 항상 사실입니다. 참조 레인지 문서 자세한 내용은.
다른 팁
변수의 상태 변경을 보여주는 "추적"을 만들 수 있습니다.
- n = 5; i = 0
- n = 5; i = 0; j = 1
- i*j <n-> 0 <5 : n = 5; i = 0; j = 2
- i*j <n-> 0 <5 : n = 5; i = 0; j = 3
- i*j <n-> 0 <5 : n = 5; i = 0; j = 4
- i*j <n-> 0 <5 : n = 5; i = 0; j = 5
- 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에서 시작하는 범위가 생성됩니다.
제휴하지 않습니다 StackOverflow