까다로운 재귀 ================ 약간 ë” ë³µìž¡í•œ ì˜ˆì œë¥¼ ê³ ë ¤í•˜ê¸° ì „ì—, ì´ì „ ì˜ˆì œë¥¼ ìž¬ê²€í† í•˜ìž:: 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``ê°€ ëœë‹¤ê³ ê°€ì •í•œë‹¤. ``move`` 와 ``go_home()`` ì— ëŒ€í•œ 함수 í˜¸ì¶œì´ ì‹¤í–‰ë˜ê³ , ìƒê¸° 코드는 다ìŒê³¼ ë™ì¹˜ê°€ ëœë‹¤:: move() go_home() ``go_home()`` ì— ëŒ€í•œ í˜¸ì¶œì„ ì›ëž˜ ì •ì˜ë¡œ êµì²´í• 수 있다:: move() if not at_goal(): move() go_home() ê·¸ë¦¬ê³ , ì´ë¡ ì 으로, í•ìƒ ``go_home()`` ì— ëŒ€í•œ 함수 í˜¸ì¶œì„ ì›ëž˜ í•¨ìˆ˜ì •ì˜ë¡œ 대체함으로ì¨, ì˜ì›ížˆ ì§„í–‰í• ìˆ˜ 있다. 하지만, ì´ëŸ° ìƒí™©ì€ ì›ì¹˜ëŠ” 않는ë°, 종êµì—는 ë마ì³ì•¼ë§Œ ëœë‹¤... **Home 1** 세ìƒì—ì„œ ë‹¤í–‰ìŠ¤ëŸ½ê²Œë„ ìˆ˜í–‰í•œ ìž‘ì—…ì´ë‹¤. ë‘번째 ``move()`` ë‹¤ìŒ ê²½ìš°ì—, ``at_goal()` `ì€ ì°¸ì´ ë˜ê³ , ``if`` ë¬¸ì€ ë¬´ì‹œëœë‹¤. ë”°ë¼ì„œ, ì´ ê²½ìš°ì— ì½”ë“œëŠ” 다ìŒê³¼ ë™ë“±í•˜ê²Œ ëœë‹¤:: move() move() **ë” ì§„ë„를 나가기 ì „ì—, ìƒê¸° ì„¤ëª…ì„ ì´í•´í•˜ëŠ” ê²ƒì´ ë§¤ìš° 중요하다.** 약간 ë” ê¹Œë‹¤ë¡œìš´ ì˜ˆì œë¥¼ 풀어가면서 필요하다면, 몇번ì´ê³ 반복해서 ì½ì–´ 확실히 ë‚´ 것으로 한다. ìž‘ì€ ë³€ê²½... --------------- ë‹¤ìŒ í”„ë¡œê·¸ëž¨ì„ ìƒê°í•´ë³´ìž:: def go_home(): if not at_goal(): move() go_home() turn_left() # 지금 실행한다! go_home() .. topic:: ìƒê°í•´ë³´ê¸° 리보그가 ìƒê¸° ëª…ë ¹ì„ ì‹¤í–‰í•˜ê¸° ì „ì—, ì–´ë–¤ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ”ì§€ 알아낸다. ì„¤ëª…ì€ ë‹¤ìŒë²ˆ í•™ìŠµì— ë‚˜ì™€ 있다.