Ex15-재귀 호출시 무한루프 문제 해결

CODEDRAGON Development/C, C++

반응형

   

재귀 호출시 무한루프 문제 해결

재귀함수의 문제를 해결하기 위해 함수를 종료하고 반환할려면 return문 추가

재귀함수 호출 전에 종료하기 위한 조건을 반드시 수행해주어야 합니다.

   

   

학습내용

지역변수 선언 후 재귀함수 호출

정적변수 사용하여 재귀함수 호출

   

   

소스코드

   

#include <stdio.h>

//
함수의 선언(출력X입력X 형태)
void recursiveCall(void);

int main(void) {
        recursiveCall( );                       //
함수의 호출
        return 0;
}

//
함수의 정의
void recursiveCall(void) {

        int i=1;                //
지역변수, 초기화 매번 수행, 메모리 소멸은 중괄호 탈출될때
//      static int i=1; //
정적지역변수, 초기화는 한번만 수행, 메모리 소멸은 프로그램 종료될

//
종료하기 위한 조건 수행
        if(i>7)                 //
함수의 무한 반복 문제를 해결하는 조건
                return;         //
값을 반환하지 않고 그냥 함수를 종료
        
        printf("Recursive Call %d
수행\n", i);
        i=i+1;                          // i
값을 증가

        recursiveCall( );       //
자기 자신을 호출

}


   

   

   

출력결과

지역변수 선언후 조건 수행시

  • void recursiveCall(void) {
  •  
  •         int i=1;        // 지역변수
  •         
  •         if(i>7)                 // 함수의 무한 반복 문제를 해결하는 조건
  •                 return;         // 값을 반환하지 않고 그냥 함수를 종료
  •         printf("Recursive Call %d회 수행\n", i);
  •         i=i+1;                          // i 값을 증가
  •  
  •         recursiveCall( );       //자기 자신을 호출
  •  
  • }

   

   

   

정적변수 사용하여 조건 수행시

  • void recursiveCall(void) {
  •  
  •         static int i=1;  //정적지역변수
  •  
  •         if(i>7)                 // 함수의 무한 반복 문제를 해결하는 조건
  •                 return;         // 값을 반환하지 않고 그냥 함수를 종료
  •         printf("Recursive Call %d회 수행\n", i);
  •         i=i+1;                          // i 값을 증가
  •  
  •         recursiveCall( );       //자기 자신을 호출
  •  
  • }

반응형

'Development > C, C++' 카테고리의 다른 글

LAB01-산술연산 계산기  (0) 2015.07.13
Ex16-매개변수를 통해 재귀함수 호출  (0) 2015.07.13
Ex14-재귀 호출시 문제  (0) 2015.07.13
1차원 배열  (0) 2015.07.12
프로세스의 메모리 구조  (0) 2015.07.11