코딩하렴

재귀함수를 사용한 팩토리얼 ! [recursive function/factorial/for문]

by 으렴




자료구조 이진트리하다가 나온 재귀함수.

일단 숙제는 두가지 형태로 팩토리얼을 만드는 것이다.
하나는 for문을 활용해서, 나머지는 재귀함수(recursive function)를 사용해서 입력하면 값이 팩토리얼로 나올 수 있게 코딩하는 것이다.


팩토리얼( ! )이란?

'계승'이라는 뜻으로 만약 n!(팩토리얼)라면 n X ... X 4 X 3 X 2 X 1 의 값이 된다.
n으로부터 1씩 감소하여 1이 될 때까지의 모든 숫자를 곱하면 된다.



1. for문 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main(){
 int i,num;
 int answer=1;
 
 do{//반복문을 돌리기위한 do-while
 
 printf(" ! : ");
 scanf("%d",&num);//값을 얻을 수를 받음
 
 for(i=1;i<=num;i++)//for문을 얻은 수만큼 반복함
 {
  answer= answer*i;
 }
 
 printf("%d ! : %d\n",num,answer);//이거슨답
 answer = 1;//for문으로 하다보니 answer의 초기화가 필요했음
 }while(1);
 
}
cs


for문을 활용하면 1로 설정한 답에,
받은 num만큼 1부터 시작해서 1씩 더해지는 i를 계속해서 곱해주는 방법으로 만들어진다.




2. 재귀함수 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorial(int num);
void main(){
 int num;
 
 do{//반복문
  printf(" ! : ");
  scanf("%d",&num);//숫자를 받음
 
    printf("%d ! : %d\n",num,factorial(num));
   }while(1);
}
 
int factorial(int num){
 if(num==0){  return 1;//탈출조건
 }
 else{//숫자가 0이 아니라면 수행할 것
  return num * factorial(num-1);
 }
}
cs


int를 반환하는 factorial함수를 만들고 먼저, 만약 받은 숫자가 0과 같다면 1을 반환하도록 한다.

숫자가 0일때 1을 반환하는 이유는 0을 곱하게 되면 0밖에 안나오기 때문이다.


재귀함수를 만들 경우 주의할 점은 반드시 탈출할 조건을 제공해주어야 한다.

팩토리얼은 받은 숫자를 1씩 감소시키며 곱해가는 패턴을 가지고 있었기 때문에 언젠가는 받은 숫자가 0이 된다.

그래서 1이 되면 탈출하라는 조건을 넣었다.




'Programming Language > C and Cpp' 카테고리의 다른 글

C++ 명시적 오버로딩 / 암시적 오버로딩  (0) 2018.03.06
C++ DAY2 성적 입출력 프로그램  (0) 2018.03.06
setw() 함수  (0) 2018.03.05
C++ DAY1  (0) 2018.03.05
C language 들어가기[include/header file/main]  (0) 2018.02.04

사이트의 정보

코딩하렴

으렴

활동하기