모름

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다.

출력

첫째 줄에 N!을 출력한다.

 

using System;
using System.IO;
using System.Text;


class Program {


    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        Console.WriteLine(Factorial(n));
    }

    static int Factorial(int num)
    {
        int result = num;
        for (int i = 1; i < num; i++)
        {
            result = result * (num - i);
        }

        if (result == 0) result = 1;

        return result;
    }
}

팩토리얼을 함수화하는 문제인줄알았는데, 알고보니 재귀 알고리즘을 이용하는 대표적인 예 중 하나였습니다...

코드(2)

using System;

class Program {
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        Console.WriteLine(Factorial(n));
    }

    static int Factorial(int num)
    {
        if (num == 1 || num == 0)
            return 1;
        else
            return num * Factorial(num-1);
    }
}

이런식으로 표현할수있습니다. 재귀함수가 직관적으로 이해하기가 힘든데, 계산되는 방식을 보면 마지막 조건까지 내려갔다가 값을 리턴하여 역으로 다시 올라오는 방식이었습니다. 즉, 팩토리얼의 재귀알고리즘을 이해하려면 역으로 생각해야합니다. 종료문이 return 1입니다. 이 식은 return 1의 값으로부터 n번째까지 올라가면서 값이 계산됩니다.

 

예를 들어 ((((1*2)*3)*4)*5) = 120 이런 느낌입니다. 조금 더 사용이 익숙해져야 머릿속으로 그림이 그려질것같습니다. 이상입니다.

콘솔출력

정상출력!