1. 다음 함수에서 asterisk(5)를 호출할때 출력되는 *의 개수는?
void asterisk(int i) {
if(i > 1){
asterisk(i/2);
asterisk(i/2);
}
printf("*");
}
asterisk(5) 가 호출됩니다.
asterisk(5) 가 실행됩니다 n 은 5입니다.
....asterisk(2) 를 호출합니다. 첫번째 호출 입니다.
.... asterisk[카피1](2) 가 실행됩니다. n은 2입니다.
.......... asterisk(1) 을 호출합니다. 첫번째 호출 입니다.
.......... asterisk[카피2](1) 이 실행됩니다. n은 1입니다.
................ 더이상 asterisk를 호출하지 않습니다.
................ 별을 한개 찍습니다.
................ asterisk[카피2] 가 끝납니다.
.......... asterisk(1) 을 호출합니다. 이것이 카피1의 두번째 호출입니다.
.......... asterisk[카피2](1) 이 실행됩니다. n은 1입니다.
................. 마찬가지로 별을 한개 찍고 끝납니다.
.......... 별은 한개 찍습니다. 카피1에서 찍는 것입니다.
.......... 카피1이 끝납니다.
....asterisk(2) 를 호출합니다. 원래 asterisk 의 두번째 호출입니다.
.......... 위의 과정을 꼭 같이 되풀이 해서 별 세개를 찍고 끝납니다.
.... 별한개를 찍습니다. 원래 asterisk 의 별을 찍는 부분입니다.
.... 원래의 asterisk 가 끝납니다.
----------------------------------------------------------
이렇게 해서 별 7개를 찍었습니다.
2. 다음과 같은 함수를 호출하고 "recursive" 문자열을 입력한 다음,
엔터키를 눌렀다면 화면에 출력되는것은?
void unknown() {
int ch;
if( (ch = getchar()) != '\n')
unknown();
putchar(ch);
}
입력문자열이 abc 인 경우에 따져 봅니다.
unknown() 이 호출 됩니다.
unknown() 이 실행 됩니다.
....... ch = getchar() 표현에 의해서 입력문자를 한개 받습니다.
....... ch 는 a 의 아스키코드값 (97)을 가지고 있습니다.
....... ch 가 줄바꿈(엔터)이 아닙니다. 계속합니다.
....... unknown() 이 호출 됩니다.
....... unknown[카피1]() 이 실행 됩니다.
.............. ch = getchar() 표현에 의해서 입력문자를 한개 받습니다.
.............. ch[카피1] 은 b이 아스키코드값 (98)을 가지고 있습니다.
.............. ch 가 줄바꿈이 아닙니다. 계속합니다.
.............. unknown() 이 호출 됩니다.
.............. unknown[카피2]() 가 실행 됩니다.
..................... ch = getchar() 표현에 의해서 입력문자를 한개 받습니다.
..................... ch[카피2] 는 c의 아스키코드값 (99) 를 가지고 있습니다.
..................... ch 가 줄바꿈이 아닙니다. 계속합니다.
..................... unknown() 이 호출됩니다.
..................... unknown[카피3]() 이 실행 됩니다.
............................ ch = getchar() 표현에 의해서 입력문자를 한개 받습니다.
............................ ch[카피3] 은 줄바꿈 문자를 가지고 있습니다.
............................ ch 는 줄바꿈입니다. while 문을 빠져 나옵니다.
............................ ch[카피3] 을 출력합니다. - 줄이 바뀝니다.
............................ unknown[카피3] 이 끝납니다.
...................... ch[카피2] 를 출력합니다. - c를 출력합니다.
...................... unknown[카피2] 가 끝납니다.
.............. ch[카피1] 을 출력합니다. - b를 출력합니다.
.............. unknown[카피1] 이 끝납니다.
....... ch 를 출력합니다. - a 를 출력합니다.
....... unknown 이 끝납니다.
줄바꿈 cba 가 출력됩니다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
파일이름 오류 (0) | 2012.03.14 |
---|---|
초보자들의 질문모음 (0) | 2012.03.14 |
비주얼 씨++ 2010에서 어셈블리어 컴파일 하는법좀 (0) | 2012.03.12 |
Visual C++ 2010 Express 사용법 (0) | 2012.03.12 |
3자리마다 콤마(,)찍는 방법. (0) | 2012.03.05 |