Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 프로토타입
- 자료구조
- mysemester
- 카카오
- 30daysdowoonchallenge
- 해시테이블
- vercel
- web
- 스택
- superstarjypnation
- 운영체제
- javascript
- level1
- 자바스크립트
- UI
- useState
- redux
- 생활코딩
- UX
- React
- html
- Til
- 큐
- 코드스테이츠
- Next.js
- 회고
- REST_API
- 백준
- CSS
- 프로그래머스
Archives
- Today
- Total
데굴데굴
[파이썬] 17478번: 재귀함수가 뭔가요? 본문
17478번: 재귀함수가 뭔가요? (acmicpc.net)
17478번: 재귀함수가 뭔가요?
평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대
www.acmicpc.net
문자열 문제는 무조건 복붙해야 한다는 교훈을 얻게 해준 문제다.
(마침표 하나 때문에 계속 실패했었다)
딱 한 번 출력되는 문장은 함수에 넣지 않고 따로 출력한다.
재귀함수를 정지해줄 제어장치로 cnt 변수를 받는다.
cnt 변수는 재귀의 진행 횟수를 카운트한다.
처음에는 텍스트가 그냥 출력되지만, 재귀할 때마다 문장 앞에 언더바 네 개(____)가 추가된다.
따라서 언더바 네 개에 cnt를 곱해준다.
cnt에 1을 더해 함수를 다시 호출하여 같은 과정을 반복한 후, cnt가 n과 같아지면(반복횟수가 입력받은 n과 같아지면) "재귀함수는 자기 자신을 호출하는 함수라네"를 출력한 후 밑으로 넘어가 "라고 답변하였지"를 출력한다.
나는 유난히 재귀함수가 헷갈리는데 이럴 때 디버거를 돌려보면서 차근차근 이해하는 편이다.
디버깅을 하면 변수가 어떤 상태에 놓여있는지 바로바로 알 수 있어서 편하다.
def chatbot(n, cnt):
print("____" * cnt + '"재귀함수가 뭔가요?"')
if cnt == n:
print("____" * cnt + '"재귀함수는 자기 자신을 호출하는 함수라네"')
else:
print("____" * cnt + '"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.')
print("____" * cnt + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.")
print("____" * cnt + '그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."')
chatbot(n, cnt + 1)
print("____" * cnt + "라고 답변하였지.")
n = int(input())
print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
chatbot(n, 0)
'algorithm > 백준' 카테고리의 다른 글
[파이썬] 7568번: 덩치 (0) | 2022.07.06 |
---|---|
[파이썬] 2231번: 분해합 (0) | 2022.07.05 |
[파이썬] 10845번: 큐 (0) | 2022.06.30 |
[파이썬] 9012번: 괄호 (0) | 2022.06.16 |
[파이썬] 10828번: 스택 (0) | 2022.06.16 |
Comments