문제
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 이런 느낌입니다. 조금 더 사용이 익숙해져야 머릿속으로 그림이 그려질것같습니다. 이상입니다.
콘솔출력
정상출력!