#10 - 함수 [매우 쉬움]

2019. 1. 3. 14:40카테고리 없음

728x90

팩토리얼

음이 아닌 임의의 정수 n을 입력받아 n! (n 팩토리얼)을 구하는 함수 factorial(n)을 반복문으로 작성하시오.


0! = 1, 1! = 1 이고, n≥2일 때, n! = n * (n-1)! 이다.

ex) 4! = 4 * 3! = 4*(3*2*1)



핵심 아이디어

ㅡ 반복문 / 재귀함수 활용

ㅡ long 자료형 변수 사용

 



※ 결과

ㅡ 반복문과 재귀함수를 통해 두 가지의 방법으로 팩토리얼을 구하였고, 각각의 자료형을 다르게 정의했다.

ㅡ 두 함수의 결과가 같을 때 코드 0로 종료되게 만들었고, 다를 때 코드 -1로 종료되게 만들었다.
ㅡ 이를 통해 각 자료형의 표현 가능 범위를 비교할 수 있다.


 

<main 함수>

ㅡ line 09-12: 음의 정수를 입력할 경우, 함수에서 오류가 날 것을 고려하여 do while 반복문으로 입력값을 제어하였다.
ㅡ line 14-15: 자료형 중 long double형이 unsigned long long (int)형보다 표현 가능 범위가 넓으므로 결과는 l.d.형으로 출력했다.
ㅡ line 17-18: u.l.l.형 자료가 언제부터 표현이 불가능해지는지 알기 위해 조건에 따라 main 함수의 반환값을 다르게 설정했다.[각주:1]


 


주요 문법

ㅡ do while반복문으로 입력값 제어하기

ㅡ long 변수와 그에 맞는 형식 지정자

ㅡ for 반복문과 재귀함수 선언


1. factorial 함수

 

ㅡ 정수형 매개변수 int 를 취하는 함수 factorial(int)를 선언.

ㅡ 가령, 4!를 계산할 때에는 4*3*2*1 의 과정을 거친다.


2. factorial_2 함수

 

ㅡ 매개변수 n 을 취하는 함수 factorial_2(int n)를 선언. 문제 조건에 따라 함숫값을 재귀적으로 정의하고, if문을 통해 초깃값을 설정하여 완성했다.

ㅡ 가령, 4!을 계산할 때에는 4*3! = 4*3*2! = 4*3*2*1 의 과정을 거친다.


 


  1. line 14에서 result 변수에 함숫값을 미리 저장한 것은 line 17 조건문에서 비교할 때 factorial(n) 함수를 다시 호출하는 것이 비효율적이라고 생각했기 때문이다. [본문으로]
728x90