16-2-³ª.Àç±ÍÈ£ÃâÀÌ °¡´ÉÇÑ ÀÌÀ¯

ÇÔ¼ö°¡ ÀÚ½ÅÀ» È£ÃâÇÑ´Ù´Â °ÍÀº ¼±¶æ ÀÌÇØÇϱâ Èûµç µ¿ÀÛÀÌ´Ù. Àç±Í È£ÃâÀÌ ¾î¶»°Ô °¡´ÉÇϸç ÀÚ½ÅÀ» È£ÃâÇÏ°íµµ ¹«ÇÑ ·çÇÁ¿¡ ºüÁöÁö ¾Ê´Â ÀÌÀ¯´Â ¹«¾ùÀÎÁö ±× ³»ºÎ¸¦ Á¶±Ý ¿¬±¸ÇØ º¸µµ·Ï ÇÏÀÚ. ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ¾î¶² ÀÏÀÌ ¹ú¾îÁö´ÂÁö ÀÌÇØÇϰí Àç±Í È£ÃâÀÌ °¡´ÉÇÑ ¹®¹ýÀû ±Ù°Å¸¦ ¾Ë°Ô µÇ¸é ÀÌÇØÀÇ ÆøÀÌ ³Ð¾îÁö°í ½º½º·Î Àç±Í È£Ãâ ÇÔ¼ö¸¦ ¹é¹æÀ¸·Î ÀÀ¿ëÇÒ ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù.

ÇÔ¼ö°¡ È£ÃâµÇ¸é È£ÃâµÈ ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸µéÀÌ ½ºÅÿ¡ »ý¼ºµÇ´Âµ¥ À̸¦ ½ºÅà ÇÁ·¹ÀÓÀ̶ó°í ÇÑ´Ù. ½ºÅà ÇÁ·¹ÀÓ¿¡´Â º¹±Í ¹øÁö, Àμö, Áö¿ªº¯¼ö µîÀÇ Á¤º¸µéÀÌ ÀúÀåµÈ´Ù. ÀÌ Á¤º¸µéÀº °¢°¢ÀÇ ÇÔ¼ö È£Ãâ½Ã¸¶´Ù ¸Å¹ø »ý¼ºµÇ¸ç °¢°¢ÀÇ È£Ãâ ÀνºÅϽºÀÇ ½ºÅà ÇÁ·¹ÀÓÀº µ¶¸³ÀûÀÌ´Ù.

°°Àº ÇÔ¼ö°¡ ¿©·¯ ¹ø È£ÃâµÇ´õ¶óµµ °¢ È£Ãâ¿¡ »ç¿ëµÇ´Â Àμö³ª Áö¿ªº¯¼öµéÀº È£Ã⺰·Î µû·Î ±â¾ïµÈ´Ù. ¼³»ç °°Àº ÇÔ¼ö°¡ ¹Ýº¹ÀûÀ¸·Î È£ÃâµÇ´õ¶óµµ °¢ ÇÔ¼öÀÇ ½ºÅà ÇÁ·¹ÀÓÀº °³º°ÀûÀ¸·Î »ý¼ºµÇ´Â °ÍÀÌ´Ù. Factorial ¿¹Á¦¿¡¼­ Factorial(1)ÀÌ ½ÇÇà ÁßÀÏ ¶§ÀÇ ½ºÅà ¸ð¾çÀ» ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù.

°¢ Factorial ÇÔ¼ö È£Ãâ ÀνºÅϽº´Â ½ºÅÿ¡¼­ °íÀ¯ÇÑ ¿µ¿ªÀ» Â÷ÁöÇϰí ÀÖÀ¸¸ç ÀÌ ¿µ¿ª¿¡ ÀÚ½ÅÀÇ Áö¿ªº¯¼ö(Àμöµµ ÀÏÁ¾ÀÇ Áö¿ªº¯¼öÀÌ´Ù.)¸¦ ±â¾ïÇÑ´Ù. Áö¿ªº¯¼ö´Â ÇÔ¼ö°¡ ÁøÇàÁßÀÎ ÀÛ¾÷ÀÇ »óŸ¦ ±â¾ïÇϴµ¥ Àç±Í È£Ãâ¿¡ ÀÇÇØ ÀÚ½ÅÀ» ´Ù½Ã È£ÃâÇÏ´õ¶óµµ ÀÌ Á¤º¸´Â ½ºÅÿ¡ °í½º¶õÈ÷ À¯ÁöµÈ´Ù.

Áï, Factorial(5)°¡ Factorial(4)¸¦ È£ÃâÇÒ ¶§ Àμö nÀÌ 5¿¡¼­ 4·Î ¹Ù²î¸é¼­ ÆÄ±«µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó »õ·Î¿î ½ºÅà ¿µ¿ª¿¡ »õ·Î¿î Áö¿ªº¯¼ö°¡ »õ·Î »ý¼ºµÇ´Â °ÍÀÌ´Ù. Factorial(5)ÀÇ nÀº 5ÀÇ °ªÀ» À¯ÁöÇϸç Factorial(4)´Â »õ·Î¿î º¯¼ö nÀ» ÇÒ´ç¹Þ¾Æ 4¶ó´Â °ªÀ» Àü´Þ¹Þ´Â´Ù. Factorial(5)´Â Factorial(4)¸¦ È£ÃâÇϰí ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¶§±îÁö ´ë±âÇϸ鼭 ÀÚ½ÅÀÇ ½ÇÇà»óŵéÀ» Áö¿ªº¯¼ö¿¡ ±×´ë·Î °£Á÷Çϰí ÀÖ´Â °ÍÀÌ´Ù.

Factorial(5)¿Í Factorial(4)´Â °°Àº ÇÔ¼öÀÌÁö¸¸ ¸ðµç Á¤º¸¸¦ °³º°ÀûÀ¸·Î °¡Áö´Â ´Ù¸¥ È£Ãâ ÀνºÅϽºÀÌ´Ù. ÄÄÆÄÀÏ·¯¿¡°Ô À̸§ÀÌ °°´Ù´Â °ÍÀº ¾Æ¹« Àǹ̰¡ ¾ø´Ù. ±×·¡¼­ ÀÚ½ÅÀ» È£ÃâÇÏ´õ¶óµµ °¢ È£Ãâ ÀνºÅϽº´Â ½ºÅÃ»ó¿¡ ´Ù¸¥ ÇÔ¼öµé·Î ±â·ÏµÇ¸ç ¼­·Î ¹æÇعÞÁö ¾Ê°í Àß µ¿ÀÛÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. Àç±Í È£ÃâÀÌ °¡´ÉÇÑ ¹°Àû Åä´ë´Â ÇÔ¼ö È£Ãâ½Ã¸¶´Ù »ý¼ºµÇ´Â ½ºÅà ÇÁ·¹ÀÓÀÌ¸ç °¢ È£Ãâ¿¡ ´ëÇØ µ¶¸³ÀûÀ¸·Î ÀúÀåµÇ´Â Áö¿ªº¯¼ö°¡ Àç±Í È£ÃâÀÇ ¹®¹ýÀû ±Ù°ÅÀÌ´Ù. Áö¿ªº¯¼öÀÇ °³³äÀÌ ¾ø´Â º£ÀÌÁ÷À̳ª Æ÷Æ®¶õÀº Àç±Í È£ÃâÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.

Àç±Í È£ÃâÀÌ ¹«ÇÑ È£ÃâÀÌ µÇÁö ¾Ê´Â ÀÌÀ¯´Â ÇÔ¼ö ³»ºÎ¿¡ ¹ÝȯÁ¡ÀÌ Àֱ⠶§¹®ÀÌ´Ù. ÀÏÁ¤ÇÑ Á¶°ÇÀÌ µÇ¸é ½ºÅÿ¡ »ý¼ºµÈ È£Ãâ ÀνºÅϽº¸¦ ¿ªÀ¸·Î µÇ¤¾î µ¹¾Æ°¥ ¼ö ÀÖ´Â ÀåÄ¡°¡ Àֱ⠶§¹®¿¡ ¹«ÇÑÈ÷ ¹Ýº¹µÇÁö ¾Ê°í ¾ðÁ¨°¡´Â Á¾·áµÉ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¸¸¾à ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ ¸¸µç´Ù°í ÇØ º¸ÀÚ.

 

int func() {

     return func();

}

 

ÀÌ·± ÇÔ¼ö´Â ¹ÝȯÁ¡¾øÀÌ ÀÚ±â ÀÚ½ÅÀ» ¹«ÇÑÈ÷ È£ÃâÇϱ⠶§¹®¿¡ Á¦´ë·Î µÈ Àç±Í È£Ãâ ÇÔ¼ö¶ó°í ÇÒ ¼ö ¾ø´Ù. ´Ü¼øÇÑ ¹«ÇÑ ·çÇÁÀÌ¸ç ³¡ÀÌ ¾ø±â ¶§¹®¿¡ ÀÌ·± ÇÔ¼ö¸¦ ½ÇÇàÇϸé(ÀÏ´Ü ÄÄÆÄÀÏÀº µÈ´Ù´Â ¾ê±â´Ù. ÄÄÆÄÀÏ·¯´Â À̰ÍÀÌ ÁøÂ¥ ¹«ÇÑ ·çÇÁÀÎÁö±îÁö´Â ÆÇ´ÜÇÏÁö ¸øÇÑ´Ù.) ±× Áï½Ã ÇÁ·Î±×·¥Àº ÀÚÆøÇØ ¹ö¸± °ÍÀÌ´Ù. Àç±Í È£ÃâÀÌ ¾ÈÀüÇÏ·Á¸é ¹Ýµå½Ã Á¶°Ç¿¡ ÀÇÇØ Àç±Í¸¦ ³¡³¾ ¼ö ÀÖ´Â ±¸¹®ÀÌ Æ÷ÇԵǾî ÀÖ¾î¾ß ÇÑ´Ù. Factorial ¿¹Á¦¿¡¼­´Â if (n <= 1)ÀÌ ¹ÝȯÁ¡ÀÇ ¿ªÇÒÀ» Çϰí ÀÖ´Ù.

Àç±Í È£ÃâÀÌ °¡´ÉÇÑ ÀÌÀ¯¿Í ¹«ÇÑ ·çÇÁ°¡ µÇÁö ¾Ê´Â ÀÌÀ¯¿¡ ´ëÇØ ¾Ë¾Æº¸¾ÒÀ¸¹Ç·Î ÀÌÁ¦ Àç±Í È£ÃâÀÇ Æ¯¼º°ú ÁÖÀÇÁ¡À» ÀÚ¿¬½º·´°Ô µµÃâÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Àç±Í È£ÃâÀº °¢ È£Ãâ ÀνºÅϽº¸¶´Ù ½ºÅà °ø°£À» ¼Ò¸ðÇϹǷΠȣÃâ ±íÀ̰¡ ³Ê¹« ±í¾î¼­´Â ¾ÈµÇ¸ç ÀÏÁ¤ ȸ¼ö¸¦ ³ÑÁö ¾Êµµ·Ï °ü¸®ÇØ¾ß ÇÒ Çʿ䰡 ÀÖ´Ù. ÀÚ½ÅÀ» Áߺ¹ È£ÃâÇÏ´Â ±íÀ̰¡ ¼öõ, ¼ö¸¸È¸ ÀÌ»ó µÈ´Ù¸é ½ºÅà °ø°£ÀÌ ¼ÒÁøµÇ´Â »çÅÂ(Stack Overflow)°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ Á¡À» Ç×»ó ÁÖÀÇÇØ¾ß ÇÑ´Ù. ½ºÅÃÀ̶õ À¯ÇÑÇÑ ¸Þ¸ð¸® °ø°£ÀÌ´Ù.

Àç±Í È£Ãâ ÇÔ¼ö°¡ ¸î ¹øÀ̳ª Àç±Í¸¦ ÇÒ ¼ö Àִ°¡´Â ½ºÅÃÀÇ ÇöÀç ³²Àº ¾ç°ú ÇÔ¼ö ³»ºÎ¿¡¼­ »ç¿ëÇÏ´Â Áö¿ªº¯¼öÀÇ ÃÑ Å©±â¿¡ µû¶ó ´Þ¶óÁø´Ù. ½ºÅÃÀÌ ¸¹ÀÌ ³²¾Æ ÀÖÀ»¼ö·Ï, Áö¿ªº¯¼ö Å©±â°¡ ÀÛÀ»¼ö·Ï ´õ ¸¹Àº Àç±Í¸¦ ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ±íÀº Àç±Í È£ÃâÀ» ÇÏ´Â ÇÁ·Î±×·¥Àº ¿É¼Ç Á¶Á¤À» ÅëÇØ ½ºÅÃÀ» ±âº»°ªº¸´Ù ´õ Å©°Ô Àâ¾ÆÁÖ´Â °ÍÀÌ ÁÁ°í Àç±Í È£Ãâ ÇÔ¼öÀÇ Áö¿ªº¯¼ö´Â ²À ÇÊ¿äÇÑ °Í¸¸ ¼±¾ðÇÏ¿© ½ºÅà °ø°£À» ³¶ºñÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.

ÃÖ´ë Àç±Í ȸ¼öµµ °ü¸®ÀÇ ´ë»óÀÌ´Ù. ¸¸¾à Factorial(1234567) È£ÃâÀ» ÇÑ´Ù¸é ¾î¶»°Ô µÉ °ÍÀΰ¡ »ý°¢ÇØ º¸ÀÚ. ÀÌ °æ¿ì ½ºÅÿ¡´Â ÃÖ´ë 120¿©¸¸°³ÀÇ Factorial ÇÔ¼ö ÀνºÅϽº°¡ »ý¼ºµÉ °ÍÀÌ¸ç ½ºÅà °ø°£Àº ÀÌ·¸°Ô ³ÐÁö ¾Ê±â ¶§¹®¿¡ ÀÌ·± È£ÃâÀ» ó¸®ÇÒ ¼ö ¾ø´Ù. ½ºÅà ¿À¹öÇÃ·Î¿ì ¿¡·¯¸¦ ¹æÁöÇÏ·Á¸é È£Ãâ¿ø¿¡¼­ ÀÏÁ¤ ȸ¼ö ÀÌ»óÀ» ³ÑÁö ¾Êµµ·Ï Çϰųª ¾Æ´Ï¸é ÇÔ¼ö ³»ºÎ¿¡¼­ ÇѰ谪 ÀÌ»óÀº °ÅºÎÇϵµ·Ï if (n > LIMIT) return 1; µûÀ§ÀÇ ¾ÈÀü ÀåÄ¡¸¦ ¸¶·ÃÇÒ Çʿ䰡 ÀÖ´Ù.

¹ÝȯÁ¡ÀÇ Á¶°ÇÀÌ À߸ø ¼³Á¤µÈ °æ¿ìµµ ½ºÅà ¿À¹öÇ÷ο찡 ¹ß»ýÇÒ ¼ö ÀÖ´Ù. Factorial ¿¹Á¦ÀÇ ¹Ýȯ Á¶°Ç¹®Àº if (n <= 1)·Î µÇ¾î Àִµ¥ ÀÌ Á¶°ÇÀ» if (n == 1)·Î ÀÛ¼ºÇß´Ù°í ÇØ º¸ÀÚ. nÀÌ 1ÀÏ ¶§ 1!Àº 1·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î 1À» ¹ÝȯÇÏ´Â °ÍÀÌ ÀÚ¿¬½º·¯¿ì¸ç if (n == 1) Á¶°Ç¹®À» ¹ÝȯÁ¡À¸·Î ¼³Á¤Çصµ ÀÌ ¿¹Á¦´Â Àß µ¿ÀÛÇÑ´Ù. ÇÏÁö¸¸ »ç¿ëÀÚÀÇ ºÎÁÖÀÇ·Î Factorial(-3)ÀÌ Àü´ÞµÇ¾úÀ» °æ¿ì ÀÌ ÇÔ¼ö´Â ¹«ÇÑ Àç±Í(½ÇÁ¦·Î´Â ¾à 40¾ï¹ø Á¤µµ)ÇÏ´Â ÀáÀçÀûÀÎ ¹®Á¦°¡ ÀÖ´Ù. ¹Ýº¹ ȸ¼ö¸¦ ÃÖÁ¾ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÏ´Â °æ¿ì´Â ±Ø´ÜÀûÀÎ ¿¡·¯±îÁöµµ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ¹Ýȯ Á¶°ÇÀ» ÃæºÐÈ÷ ¾ÈÀüÇÏ°Ô ¼³Á¤ÇØ¾ß ÇÑ´Ù.