더 많은 재귀 ============== 생각해봤던 마지막 프로그램은 다음과 같다:: def go_home(): if not at_goal(): move() go_home() turn_left() # 지금 실행한다! go_home() # 첫번째 호출 지금까지, 아마도 어떻게 동작하는지 알아냈을 것이다; 최소한으로, 프로그램을 실행했어야만 된다! **Home 1** 세상에서 상기 프로그램을 실행한다고 가정하고, 프로그램을 분석해보자. 늘 그렇드싱, 명령어 하나를 생각해보자:: go_home() 상기 명령어는 정의된 함수 몸통부분으로 교체된다:: if not at_goal(): move() go_home() # 두번째 호출 turn_left() 리보그가 아직 목적지에 도달하지 않았기 때문에, ``if`` 문 코드 덩어리가 실행된다:: move() go_home() # 두번째 호출 turn_left() 다시 한번, ``go_home()`` 을 정의된 함수 몸통으로 교체한다:: move() if not at_goal(): move() go_home() # third call turn_left() turn_left() 그리고, 한번더 수행되면:: move() move() if not at_goal(): move() go_home() # 4번째 호출 turn_left() turn_left() turn_left() 두번째 ``move()`` 명령어 다음에, 리보그가 목적지에 도달해서, ``if`` 문장 코드 덩어리는 실행되지 않는다:: move() move() if not at_goal(): move() # 호출되지 않음 go_home() # 호출되지 않음 turn_left() turn_left() turn_left() .. note:: ``go_home`` 은 세번 호출된다... 리보그는 왼쪽으로 세번 회전한다. 아마도 리보그가 횟수를 세는데 사용할 무언가가 된다... 이점을 기억한다! 그렇기 때문에, 목적지에 도착한 후에, 프로그램을 종료하기 전에 리보그는 왼쪽으로 세번 회전한다. (아마도 축하 공연?) .. topic:: 시도해 보기! 상기 프로그램을 실행해서, 재귀 프로그램이 실제로 마지막에 리보그를 세번 회전하게 되는 것을 확인한다. 또다른 테스트 ---------------------- 다시 동일한 세상을 사용해서, 다음 프로그램을 실행하면, 리보그가 마지막으로 향하는 방향을 알아낼 수 있을까? .. hint:: .. code-block:: py3 def go_home(): move() if not at_goal(): go_home() turn_left() turn_left() # 지금 실행한다! go_home() .. topic:: 직접 작성해 본다! 실행하지 않고 상기 프로그램이 해독한다. 그리고 나서, 리보그를 실행해서 이해한 것을 점검한다. 프로그램을 실행하기 전에, 리보그가 이미 목적지에 도착해 있다면, 무슨 일이 벌어질까?