
exit(0): 정상 종료
exit(1): 에러 메세지 종료
return문: 그 해당 함수만 종료, 호출된 함수의 위치로 돌아감. (vs main함수속 return문은 프로그램 전체를 종료)
즉, main함수 속 return문과 exit(0)은 같은 동작을 한다. 둘 다 프로그램 전체를 종료
백준 1914번 하노이의 탑을 풀던 중, 종료 조건(base case)로 들어갈 때, 함수가 종료되는 지점에 return과 exit을 둘 다 넣어보면서 차이점을 살펴보았다.
결과적으로는,
1) return 0; 문으로 함수를 빠져나오면,
재귀함수 호출로 인해, 스택에 쌓여있던 나머지 줄(함수들)이 차례로 실행...!
2) exit(0); 문으로 함수를 빠져나오면,
재귀함수 호출로 인해, 스택에 쌓여있던 나머지 줄들이 없어진 채, 함수가 종료...!
아래는 시도해본 과정들이다. 이해하는데, 참고되길 바란다.
https://www.acmicpc.net/problem/1914
1914번: 하노이 탑
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
1) return 문을 이용해서, 함수 빠져나올 때 -> 뒤에 남아있는 문장 실행하며 종료
import sys
def hanoi(start, end, n):
# 종료 조건
if n == 1:
print(start, end)
return 0
hanoi(start, 6 - start - end, n - 1)
print(start, end)
hanoi(6 - start - end, end, n - 1)
N = int(sys.stdin.readline())
print(2**N - 1)
if(N <= 20):
hanoi(1, 3, N)
/*
출력 결과
입력: 3
출력:
7
1 3
1 2
3 2
1 3
2 1
2 3
1 3
*/
2) exit(0)을 이용해 함수를 빠져나올 때 -> 바로 프로세스 종료
import sys
def hanoi(start, end, n):
# 종료 조건
if n == 1:
print(start, end)
exit(0)
hanoi(start, 6 - start - end, n - 1)
print(start, end)
hanoi(6 - start - end, end, n - 1)
N = int(sys.stdin.readline())
print(2**N - 1)
if(N <= 20):
hanoi(1, 3, N)
/*
입력: 3
출력:
7
1 3
*/'크래프톤 정글 > TIL' 카테고리의 다른 글
| [5주차] Bad file descriptor (0) | 2023.11.18 |
|---|---|
| [5주차] 공부키워드 (0) | 2023.11.13 |
| [4주차] 소수판별 (에라토스테네스의 채) (0) | 2023.11.08 |
| [4주차] 이진탐색트리 (AVL 트리, RB 트리의 비교) (0) | 2023.11.07 |
| [4주차] C 언어 포인터 주소값 출력 (0) | 2023.11.07 |