홀로의 책방/코딩을 공부하자(C언어)

chapter 5. 재귀함수와 라이브러리함수

알 수 없는 사용자 2020. 1. 30. 21:29

1.재귀함수

함수 구현에서 자신의 함수를 호출하는 함수를 재귀 함수(recursive funtion)라 한다.

수학에서 재귀 함수를 찾으면 n factorial = n! 이 있다. 

 

결과:

1!=1
 2!=2
 3!=6
 4!=24
 5!=120
 6!=720
 7!=5040
 8!=40320
 9!=362880
10!=3628800

 

2.재귀 함수 실행의 장단점

재귀함수는 시간도 오래걸리고 메모리의 사용도 많다. 내부적으로 여러번 함수를 실행하기 때문이다.

반복구문으로 만들 수 있다면 반복구문으로 만드는게 좋다. 만들기 쉬운걸로 만들면된다.

 

3.라이브러리함수

함수 rand() - 특정한 나열 순서나 규칙을 가지지 않는 연속적인 임의의 수를 난수라 한다. 이 난수를 생성하는 함수가 rand()이다.  헤더파일 stdlib.h가 필요하고, 0에서 32767사이의 정수 중에서 임의로 하나의 정수를 반환한다.

 

그런데!

rand()는 함수 호출 순서에 따라 항상 일정한 수가 반환된다. 매번 난수를 다르게 생성하려면 시드(seed)값을 이용한다.

seed값을 다르게 할려면 함수 time(NULL)을 이용한다.

 

time(NULL)은 1970년 1월1일 이후 현재까지 경과된 시간을 초 단위로 반환하는 함수이다.

 

난수에 시드를 지정하기 위해 함수 srand((long) time(NULL))을 호출하고, 이 이후부터 함수 rand()에는 서로 다른 난수를 만들 수 있다. 

1에서 n 까지의 난수를 발생시키려면 함수 rand()를 이용하여 수식 rand()% n + 1을 사용한다. a에서 b까지의 난수를 발생시키려면 rand()%(b-a+1)+a를 이용한다.

결과는 0부터 100까지의 숫자중 무작위 5개의 숫자가 나온다. 변수number와 함수srand를 지우고 수정하면 일정한 숫자만 나오게 되어있다.

 

4.난수맞추기