이전 항목

3. 더 많은 재귀

다음 항목

변수

현재 문서

주의사항

해당 문서는 중요 변경 작업 중에 있습니다. 일부 문서에 텍스트가 빠져있거나, 불어로 플레이스홀더(placeholder) 자리차지만 되어 있을 수 있습니다.

4. 재귀 횟수 세기

리보그는 세는 방법을 알고 있다... 하지만, 세는 방법을 아직 보지는 못했고 한동안 그럴 것이다. 여기서 지금까지 학습한 파이썬을 일부 알고 있다면, 숫자 변수를 사용해서 리보그가 어떻게 셀 수 있는지 알고 있을 것이다; 하지만, 여러분에게 그렇게 하지 않도록 부탁한다.

Tokens 5 세상을 선택한다. 리보그가 서있는 곳에, 토큰을 하나 발견할 수 있다. 리보그가 토큰을 집어(take()) 다음 정사각형으로 이동하는지는(move()) 알고 있다. 더이상 어떤 토큰도 찾을 수 없는 정사각형에 도착할 때까지 토큰을 집고, 이동하는 두 단계를 리보그가 반복하도록 한다. 그리고 나서, 정사각형에서 모은 모든 토근을 정사각형 한 곳에 놓고, 다음 정사각형으로 이동한다.

정확하게 똑같은 프로그램이 Tokens 6**에서도 동작해야만 된다. **Tokens 6 세상에는 토큰 갯수가 다르다. 그래서, 고정된 반복 횟수를 갖지 않기 때문에, repeat 명령어를 사용할 수 없다.

리보그가 호주머니에 무한히 많은 토큰을 갖고 출발한다: 그래서, 한 지점에 토큰 내려놓기를 언제 멈출지 알아낼 수 없어서 carries_object() 도 사용할 수 없다.

직접 시도해 보기!

재귀를 사용해서 해당 문제를 해결하는 해법을 작성한다. 해법에 대한 개요가 다음에 나와 있다:

def collect():
    # 무언가 수행한다.
    # 무언가 수행한다.
    if 특정_조건:
        # 무언가 수행한다.
    # 무언가 수행한다.

collect()
move()

힌트

기본 반복 명령어는 take()move() 가 되고, 조건으로 object_here() 함수를 생각해볼 수 있다.

def collect():
    take()
    move()
    if object_here():
        collect()
    put()

collect()
move()

재귀 도전과제

이전에 수행했던 모든 도전과제를 재검토한다. while 루프 대신에 재귀를 사용하는 새로운 해법으로 코드를 작성한다.