목차

이전 항목

1. 재귀: 간단한 예제

다음 항목

3. 더 많은 재귀

현재 문서

주의사항

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

2. 까다로운 재귀

약간 더 복잡한 예제를 고려하기 전에, 이전 예제를 재검토하자:

def go_home():
    if not at_goal():
        move()
        go_home()

# 지금 실행한다!
go_home()

이제, 함수가 호출될 때, 저자가 설명한 것을 기억한다. 함수 몸통으로 함수호출을 교체하는 것으로 간주할 수 있다. 이것에 따라서, 상기 프로그램은 다음이 된다:

if not at_goal():
    move()
    go_home()

Home 1 세상에서, 처음 명령어가 실행될 때, at_goal``은 ``false``가 되어, ``not at_goal()``은 ``true``가 된다고 가정한다. ``movego_home() 에 대한 함수 호출이 실행되고, 상기 코드는 다음과 동치가 된다:

move()
go_home()

go_home() 에 대한 호출을 원래 정의로 교체할 수 있다:

move()
if not at_goal():
    move()
    go_home()

그리고, 이론적으로, 항상 go_home() 에 대한 함수 호출을 원래 함수정의로 대체함으로써, 영원히 진행할 수 있다.

하지만, 이런 상황은 원치는 않는데, 종국에는 끝마쳐야만 된다... Home 1 세상에서 다행스럽게도 수행한 작업이다. 두번째 move() 다음 경우에, at_goal()` `은 참이 되고, ``if 문은 무시된다. 따라서, 이 경우에 코드는 다음과 동등하게 된다:

move()
move()

더 진도를 나가기 전에, 상기 설명을 이해하는 것이 매우 중요하다. 약간 더 까다로운 예제를 풀어가면서 필요하다면, 몇번이고 반복해서 읽어 확실히 내 것으로 한다.

2.1. 작은 변경...

다음 프로그램을 생각해보자:

def go_home():
    if not at_goal():
        move()
        go_home()
    turn_left()

# 지금 실행한다!
go_home()

생각해보기

리보그가 상기 명령을 실행하기 전에, 어떤 작업을 수행하는지 알아낸다. 설명은 다음번 학습에 나와 있다.