재귀함수란 자기 자신 함수을 호출하도록 만들어진 함수를 말합니다.
자기 자신을 호출하기 때문에 코드의 줄 수를 줄일 수 있지만,
함수 호출시 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 입니다.
[프로그래밍] 3. 레지스터변수(Resister variable) (0) | 2016.10.02 |
---|---|
[프로그래밍] 2. 자동변수(automatic variable) (0) | 2016.10.01 |
[프로그래밍] 1. 기억 클래스의 정의 (0) | 2016.09.30 |
OSI 7 Layer (Open System Interconnection) (0) | 2016.07.30 |
[네트워크] OSI 7계층 (0) | 2016.07.29 |