반복문의 실행과 결과

dev_log·2022년 6월 29일

내 언어로 

목록 보기
1/3

반복문은 중괄호 안에 있는 반복하고자 하는 행위를
소괄호에 있는 지시에 따라서 조건이 끝날 때까지 실행한다.

for(초기화; 조건식; 증감문){
표현식(반복실행할 문장)
}

초기화는 반복되는 행위의 처음값으로,
let i = 0;
let i = 99;
등과 같이 표현되며, i가 표현식에 포함되어 있지 않다면 꼭 특정 숫자만이 들어갈 수 있는 것은 아니다. 예를 들어 i의 초기화가 0이고 조건식이 3이하인 것과 초기화가 99이고 102이하인 것은 그 실행의 반복수가 같다
즉 i가 0,1,2,3일 때 실행되는 것과
i가 99, 100, 101, 102일 때 실행되는 것은
모두 4번으로 동일하기 때문이다

조건식은
i <= 14
i < 6
과 같이 범위의 형태로 표현되며
i가 언제까지 표현식을 실행해야하는지 알려준다.

증감문은 i가 1씩 증가하는지, 2씩 증가하는지 등을 알려준다. 일반적으로 0부터 7까지를 생각하면,
0 1 2 3 4 5 6 7을 생각하지만
증감문이 i=i+2이라면,
0 2 4 6이 된다.
따라서 전자는 표현식을 8회 실행하지만, 후자는 4회 실행하는 차이가 난다.

**

**

예시를 통해 반복문의 코드와 실행결과를 살펴보자

result = 1;
for(i=2; i<=5; i++){
    result = result + i;
}

실행결과 : 15

풀이 : 중괄호 안의 표현식을 보면 result라는 값은 그 직전의 "result에 i를 더하는 행위를 반복"한다.
(주의할 점은 반복하는 행위가 1개의 식에서 이루어진다는 것//
자꾸 식이 여러 개 써진다고 착각하게 된다. 식은 하나이고 그 식에 변수i가 계속 덧붙여지는 모습을 상상하자.
1 +2 ...+5)

result의 초기값은 1이고 거기에 "2부터 시작해서 5가 될 때까지 1씩 증가하는 i라는 변수"가 더해진다.
따라서

1에 '2를 더하고' (초기값)'3을 더하고' '4를 더하고' '5를 더하는' 행위를 반복하고 (5가 될 때까지)
그 결과값은 15이다.

그렇다면 result를 0으로 하고 i를 1부터 시작하면 어떤 결과가 나올까?

result = 0;
for(i=1; i<=5; i++){
    result = result + i;
}

결과값은 15로 같다. 다만 식이 1로 시작하느냐 0으로 시작하느냐의 차이일 뿐이다.

과정((1+2+3+4+5 =)) 결과 15
과정((0+1+2+3+4+5 =)) 결과 15

그렇다면 결과값 result를 15처럼 (하나의) 숫자가 아니라 그것을 구현시킨 식으로 표현하고 싶으면 어떻게 해야할까?

15를 1+2+3+4+5와 같은 식으로 표현하고 싶으면 숫자를 문자로 바꾸는 작업을 먼저 수행해야 한다. 인간의 입장에서는 전자나 후자나 모두 같은 의미처럼 느껴지지만 컴퓨터는 둘을 다르게 인식한다. 즉 전자는 숫자/number이지만, 후자는 숫자처럼 생긴 문자와 '+'플러스 기호라는 문자가 합쳐진 문자열(string)인 것이다.
따라서 표현식을 쓸 때
result = result + i 가 아니라
result = result + String(i) 로 써야한다.

result = 1;
for(i=2; i<=5; i++){
    result = result + '+' + String(i);
}

실행결과: '1+2+3+4+5'

그런데 여기서 실수로 플러스기호를 생략하면 다음과 같은 일이 일어난다

result = 1;
for(i=2; i<=5; i++){
    result = result + String(i);
}

실행결과: '12345'

표현식에 변수i가 포함되지 않는 경우

표현식에 i를 쓰다보면 마치 꼭 표현식에는 변수가 들어가야할 것 같은 느낌이 들 때도 있다.
i가 표현식에서 사용되지 않는다면, 초기화와 조건문은 어떤 의미가 있을까? 결과가 같은 다음 2개의 식을 비교해보자

result = 3;
for(i=99; i<=100; i++){
    result = result + '+' + 1;
}
result = 3;
for(i=1; i<=2; i++){
    result = result + '+' + 1;
}

실행결과: '3+1+1'

위의 2개의 식은 초기화와 조건문은 다르지만,
결과값이 '3+1+1'로 동일하다.
그 이유는 i라는 변수가 표현식에 직접 등장하지 않기 때문에 반복되는 행위의 시작점과 끝점, 즉 행위를 몇번 했느냐의 의미만 나타내기 때문이다.
즉 "1번부터 2번"와 "99번부터 100번까지"는 모두 2번의 행위를 반복한다는 것으로 의미가 같아서 동일한 결과가 나온다.

만약 i가 1씩 증가하는 게 아니라 2씩 증가한다면?

result = 3;
for(i=1; i<=2; i=i+2){
    result = result + '+' + 1;
}

실행결과: '3+1'

i가 i++가 아니라 i=i+2라면
초기화에서는 1이 조건식을 만족하므로 표현식을 실행하지만,
그 다음부터는 i=3이 되어 조건식을 통과하지 못하므로
표현식을 실행시키지 못하고 조건문이 종료된다.
따라서 맨처음 result(3)에서 한번의 반복문이 실행되어 3+1이 결과로 나온다

0개의 댓글