본문 바로가기

컴퓨터/언어,프로그래밍

재귀함수 사용 예제

재귀함수란 자기 자신 함수을 호출하도록 만들어진 함수를 말합니다.

자기 자신을 호출하기 때문에 코드의 줄 수를 줄일 수 있지만,

함수 호출시 return 해야 하는 주소를 stack 에 저장하기 때문에

너무 많은 호출은 stack overflow 라는 치명적인 문제를 발생할 수 도 있습니다.

 

 

★ 소스코드는 아래와 같습니다.

 

#include <stdio.h>

 

float recursive( int n ) {
        if( n == 1 )
                return 1;
        else
                return recursive( n - 1 ) + ( (float)1 / n );
}

 

int main() {
        int n;

 

        printf("정수 n 을 입력하세요 : ");
        scanf("%d", &n);

 

        printf("정수 n = %d 에 대한 수식의 결과값은 %f 입니다.\n", n, recursive( n ) );

 

        return 0;
}

 

★ 소스 설명

 

위의 코드를 보시면 우선 재귀함수 recursive( int n )  를 작성합니다. ( 분홍색 )

작성 방법은 종료 조건을 먼저 생각합니다.

위의 경우는 n == 1 인 경우에 return 1 을 해서 종료합니다.

그렇지 않은 경우는 자기 자신의 recursive( int n )  을 호출하는데,

recursive( n - 1 ) + ( (float)1 / n ) 와 같이 호출합니다.

즉 수식을 계산하기 위함이죠.

이로써 재귀 함수를 봤고 main 함수는 그다지

큰 부분이 없습니다.

 

scanf 로 정수 n 을 입력받는 부분( 보라색 )과

그 결과를 출력하는 부분 ( 파란색 ) 입니다.

 

 

 

★ 출력결과

 

================================================================================

 

정수 n 을 입력하세요 : 1
정수 n = 1 에 대한 수식의 결과값은 1.000000 입니다.

정수 n 을 입력하세요 : 100
정수 n = 100 에 대한 수식의 결과값은 5.187378 입니다.

정수 n 을 입력하세요 : 4
정수 n = 4 에 대한 수식의 결과값은 2.083333 입니다.

================================================================================

제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...