|
안녕하세요?
지난번에 재귀호출함수에 대해서 보내주신 답변은 고맙게 받아 보았습니다. 그런데 문제는 저의 IQ에 있는것 같더군요! 보내주신 답변을 심사숙고하니, 예로 들어주신 n!함수는 이해가 되는데요, 저의 경우에서와 같이 재귀호출함수가 두번 사용된 함수의 LEVEL값의 변화에 따른 함수들의 호출관계 및 진행과정을 VC++5.0을 이용하여 F10 Key 및 F11 Key를 이용하여 단계별로 변수들의 변화와 진행하는 cusor의 위치에 따른 함수의 경로를 추적하여 보았습니다. cusor를 따라 이리저리 돌아다녀 보았지만, 첫번째 재귀호출함수의 진행 후의 두번째 재귀호출함수의 호출과정과 두번째 재귀호출함수에서의 진행과정상에서 접하게 되는 첫번째 재귀호출함수의 처리 문제와 각각의 LEVEL값의 변화에 있어서 진행되는 단계들이 이해하기 어렵더군요. 귀찮으시더라도 LEVEL값의 변화에 따른 함수들의 진행관계나, 각 함수들의 호출 진행을 자세히 설명해 주시면 정말 감사하겠습니다.
참고로 재귀호출함수를 다시 적어 보내 드립니다.
//ruler.cpp-눈금자를 세분하기 위한 재귀 호출의 사용
#include <iostream.h>
const int Len = 66;
const int Divs = 6;
void subdivide(char ar[], int low, int high, int level);
int main(void)
{
char ruler[Len];
for (int i = 1; i < Len - 2; i++)
ruler[i] = ' ';
ruler[Len - 1] = '\0';
int max = Len - 2;
int min = 0;
ruler[min] = ruler[max] = ':';
cout << ruler << "\n";
for (i = 1; i <= Divs; i++)
{
subdivide(ruler, min, max, i);
cout << ruler << "\n";
for (int i = 1; i < Len - 2; i++)
ruler[i] = ' '; // 빈 눈금자로 리셋
}
return 0;
}
void subdivide(char ar[], int low, int high, int level)
{
if (level == 0)
return;
int mid = (high + low) / 2;
ar[mid] = ':';
subdivide(ar, low, mid, level - 1);
subdivide(ar, mid, high, level - 1);
}
****** from " C++ 기초플러스 제2판" - 성안당
page : 358p.
|