Àç ±Í (µÇºÎ¸§)

ÁÖÀÇ : ÀÌ°ÍÀº ´ë´ÜÈ÷ Áøº¸µÈ ÁÖÁ¦ÀÌ¸ç ´ëºÎºÐÀÇ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ¿©·¯ºÐÀº ±×°Í¿¡ °üÇÏ¿© ¾Ë ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù. ¶§¶§·Î, °¡Ä¡¸¦ Æò°¡ÇÒ¼ö ¾øÀ» Á¤µµ·Î ³Ê¹«³ª À¯¿ëÇÏ´Ù, ±×·¡¼­ ³ª´Â ¿©±â¿¡ ±×°ÍÀ» ¿©·¯ºÐÀÇ °øºÎ¸¦ À§ÇÏ¿© Á¦½ÃÇÑ´Ù. °ð ¹Ù·Î ÀÌÇØ°¡ ¾È°¥Áö¶óµµ °ï¶õÇØ ÇÏÁö ¸¶¶ó.

±×°ÍÀº ¹«¾ùÀΰ¡?

³»°¡ ÇÁ·Î±×·¡¹ÖÀÇ ÀüȯÁ¡ÀÇ ÇϳªÀΠȸµ¹ÀÌ¿¡ °üÇÏ¿© ÀÌÀü¿¡ ¾ð±ÞÇÑ °Í¿¡µµ ºÒ±¸ÇÏ°í »ç½Ç ¸í½ÃÀûÀΠȸµ¹ÀÌ ±¸Á¶ ¾øÀ̵µ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¶ó½ºÇÁ¿Í °°Àº, ¾î¶² ¾ð¾îµéÀº ½ÇÁ¦·Î FOR, WHILE, µîµî°ú °°Àº ¸í½ÃÀûÀΠȸµ¹ÀÌ ±¸Á¶¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù. ´ë½Å¿¡ ±× ¾ð¾îµéÀº Àç±Í(µÇºÎ¸§) recursion À̶ó°í ºÎ¸£´Â Å×Å©´ÐÀ» »ç¿ëÇÑ´Ù. ÀÌ°ÍÀº ¾î¶² Á¾·ùÀÇ ¹®Á¦¿¡´Â ´ë´ÜÈ÷ °­·ÂÇÑ Å×Å©´ÐÀ̶ó°í Áõ¸íµÇ¾úÀ¸¸ç, ±×·¡¼­ ¿ì¸®´Â ±×°ÍÀ» Áö±Ý »ìÆ캸·Á°í ÇÑ´Ù.

Àç±Í´Â ÇϳªÀÇ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ºÎºÐÀ¸·Î °°Àº ÇÔ¼ö¸¦ Àû¿ëÇÏ´Â °ÍÀ» ´Ü¼øÈ÷ ÀǹÌÇÑ´Ù. ±×·±½ÄÀ¸·Î (¸¹Àº ÀÚÀ¯¼ÒÇÁÆ®¿þ¾îÀÇ ±Ù¿øÀÌ µÇ´Â) GNU °¡ Àç±ÍÀûÀ̶ó°í ¸»ÇÏ¿©Áø´Ù. ¿Ö³ÄÇϸé GNU´Â 'GNU's Not Unix'À» ´ëÇ¥Çϱ⠶§¹®ÀÌ´Ù. Áï GNU´Â GNU¸¦ Á¤ÀÇÇÏ´Â ÇѺκÐÀÌ´Ù!

ÀÌ°ÍÀ» ÀÛµ¿ÇÏ°Ô ÇÏ´Â ¿äÁ¡Àº ÇÔ¼ö°¡ ¾î¶² ÇÑ Á¡¿¡¼­ ºñ-Àç±ÍÀûÀÎ ÇعýÀ¸·Î ºÐ±âÇϵµ·Ï Á¾·áÁ¶°ÇÀÌ ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. (GNU¿¡ ´ëÇÑ Á¤ÀÇ´Â ÀÌ·± Å×½ºÆ®¿¡ Åë°úÇÏÁö ¸øÇÏ¸ç ±×·¡¼­ ¹«ÇÑ È¸µ¹ÀÌ¿¡ ºüÁö°Ô µÈ´Ù.)

°£´ÜÇÑ ¿¹Á¦ Çϳª¸¦ »ìÆ캸ÀÚ. ¼öÇÐÀûÀÎ ÆÑÅ丮¾ó ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇ µÈ´Ù. Àμö¸¦ Æ÷ÇÔÇÑ ±× Àμö±îÁöÀÇ ¸ðµç ¼öÀÇ °öÀ̸ç, ±×¸®°í 1ÀÇ ÆÑÅ丮¾óÀº 1ÀÌ´Ù. ÀÌ°Í¿¡ ´ëÇÏ¿© »ý°¢ÇØ º¸¸é, ¿ì¸®´Â ÀÌ°ÍÀ» Ç¥ÇöÇÏ´Â ´Ù¸¥ ¹æ¹ýÀÌ ÀÖÀ¸¸ç N ÀÇ ÆÑÅ丮¾óÀº (N-1) ÀÇ ÆÑÅ丮¾óÀ» N ¹è ÇÑ°Í°ú µ¿µîÇÏ´Ù´Â °ÍÀ» ¾Ë°ÔµÈ´Ù.

Thus:
1! = 1
2! = 1 x 2 = 2
3! = 1 x 2 x 3 = 2! x 3 = 6
N! = 1 x 2 x 3 x .... (N-2) x (N-1) x N = (N-1)! x N

±×·¡¼­ ¿ì¸®´Â ÀÌ°ÍÀ» ÆÄÀ̽ãÀ¸·Î ´ÙÀ½°ú °°ÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù:

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

ÀÌÁ¦ ¿ì¸®´Â ¸Å¹ø N À» °¨¼Ò½ÃÅ°°í N ÀÌ 1 °ú °°ÀºÁö Á¡°ËÇϱ⠶§¹®¿¡ ±× ÇÔ¼ö´Â ¹Ýµå½Ã ¿Ï°áµÈ´Ù.

µÇºÎ¸§À» »ç¿ëÇÏÁö ¾Ê°í ÆÑÅ丮¾ó ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº »ó´çÈ÷ ´õ ¸¹Àº Äڵ带 ¿ä±¸ÇÑ´Ù. ¿©·¯ºÐÀº 1 ¿¡¼­ N ±îÁö ¸ðµç ¼ýÀÚ¸¦ ´ãÀº ¸®½ºÆ®¸¦ ¸¸µé°í ±× ¸®½ºÆ®¸¦ µ¹·Á¼­ ÇöÀçÀÇ Çհ踦 ´ÙÀ½ Ç׸ñ°ú °öÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ±×°ÍÀ» ¿¬½ÀÀ¸·Î ½ÃÇèÇØ º¸¶ó ±×¸®°í ±× °á°ú¸¦ À§ÀÇ ÇÔ¼ö¿Í ºñ±³Ç϶ó.

¸®½ºÆ®¿¡ ´ëÇÑ µÇºÎ¸§

µÇºÎ¸§ÀÌ ¸Å¿ì À¯¿ëÇÑ ´Ù¸¥ ¿µ¿ªÀº ¸®½ºÆ®¸¦ ó¸®ÇÏ´Â °÷ÀÌ´Ù. ¿ì¸®°¡ ºó ¸®½ºÆ®¿¡ ´ëÇÏ¿© Å×½ºÆ®¸¦ ÇÒ¼ö ÀÖ´Ù¸é, ±×¸®°í ù ¹ø° ¿ä¼Ò¸¦ »« ¸®½ºÆ®¸¦ ¸¸µé¼ö ÀÖ´Ù¸é ¿ì¸®´Â µÇºÎ¸§À» ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

printList ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ¿­ ¸®½ºÆ®ÀÇ °¢ ¿ä¼Ò¸¦ Ãâ·ÂÇÏ´Â »ç¼ÒÇÑ ¿¹Á¦¸¦ »ìÆì º¸ÀÚ:

def printList(L):
    if L:
        print L[0]
        # for [1:] - see 'slicing' in the Python reference manual
        printList(L[1:])

¸¸¾à L ÀÌ ÂüÀ̶ó¸é - ºñ¾îÀÖÁö ¾Ê´Ù¸é - ¿ì¸®´Â ù ¹ø° ¿ä¼Ò¸¦ Ãâ·ÂÇÏ°í ±×¸®°í³ª¼­ ±× ¸®½ºÆ®ÀÇ ³ª¸ÓÁö¸¦ ó¸®ÇÑ´Ù.

±×°ÍÀº ´Ü¼øÇÑ ¸®½ºÆ®¸¦ À§ÇÏ¿© °£´ÜÇÑ È¸µ¹À̸¦ »ç¿ëÇÑ »ç¼ÒÇÑ °ÍÀÌ´Ù. ±×·¯³ª ¸®½ºÆ®°¡ º¹ÀâÇÏ°í ±× ¾È¿¡ ´Ù¸¥ ¸®½ºÆ®¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù¸é ¾î¶² ÀÏÀÌ ÀϾ Áö »ý°¢ÇØ º¸¶ó. ¸¸¾à ¿ì¸®°¡ Ç׸ñÇϳª°¡ ¸®½ºÆ®ÀÎÁö Å×½ºÇÒ¼ö ÀÖ´Ù¸é ±×·¯¸é ¿ì¸®´Â printList()¸¦ Àç±ÍÀûÀ¸·Î È£ÃâÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é ¿ì¸®´Â ´Ü¼øÈ÷ ±×°ÍÀ» Ãâ·ÂÇÑ´Ù. ±×°ÍÀ» ½ÃÇèÇØ º¸ÀÚ:

def printList(L):
    # if its empty do nothing
    if not L: return
    # if its a list call printList on 1st element
    if type(L[0]) == type([]):
        printList(L[0])
    else: #no list so just print
        print L[0]
    # now process the rest of L
    printList(L[1:])

ÀÌÁ¦ ¿©·¯ºÐÀÌ ÀüÅëÀûÀΠȸµ¹ÀÌ ±¸Á¶¸¦ »ç¿ëÇÏ¿© ±×°ÍÀ» ½ÃµµÇØ º»´Ù¸é, ¿©·¯ºÐÀº ±×°ÍÀÌ ´ë´ÜÈ÷ Èûµé´Ù´Â °ÍÀ» ¹ß°ßÇÒ °ÍÀÌ´Ù. µÇºÎ¸§Àº ´ë´ÜÈ÷ º¹ÀâÇÑ ÀÛ¾÷À» »ó´ëÀûÀ¸·Î °£´ÜÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù.

(¹°·Ð!) ¿©±â¿¡µµ ³­Á¦´Â ÀÖ´Ù. °Å´ëÇÑ µ¥ÀÌŸ ±¸Á¶¿¡ ´ëÇÑ µÇºÎ¸§Àº ¸Þ¸ð¸®¸¦ ´Ù ¸Ô¾î Ä¡¿ì´Â °æÇâÀÌ À־ ¿©·¯ºÐÀÌ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÏ´Ù¸é, ȤÀº ´ë´ÜÈ÷ °Å´ëÇÑ µ¥ÀÌŸ ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù¸é ´õ º¹ÀâÇÑ °ü·ÊÀûÀÎ Äڵ带 »ç¿ëÇÏ´Â ÆíÀÌ ´õ ¾ÈÀüÇÒ ¼ö ÀÖ´Ù.

ÁÁ´Ù, ÀÌÁ¦ ¶Ç ´Ù¸¥ ¹ÌÁöÀÇ ¿µ¿ªÀ¸·Î ´Þ·Á°¡ º¸ÀÚ. ¿ì¸®´Â °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹ÖÀ» ¼Ò°³ÇÑ´Ù.


Previous  Next  Contents


¿©·¯ºÐÀÌ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÏ¿© Áú¹® ȤÀº Á¦¾È»çÇ×ÀÌ ÀÖÀ¸¸é ´ÙÀ½ÁÖ¼Ò·Î ³ª¿¡°Ô ÀüÀÚ¸ÞÀÏÀ» º¸³»¶ó: agauld@crosswinds.net