역귀함수 실행 순서

최근에 귀환의 예를 보았는데 귀환 전의 문장과 귀환 후의 문장의 집행 순서가 정반대인 것을 발견했다. 이것은 나에게 주는 가장 큰 느낌이다. 구체적으로 보면 다음과 같은 예를 볼 수 있다.
/*반복 예*/
#include
void up_and_down(int);
int main(void)
{
  up_and_down(1);
  return 0;
}
void up_and_down(int n)
{
printf("Level %d:n location%p
",n,&n); /* 1 */ if(n<4) up_and_down(n+1); printf("Level %d:n location%p
",n,&n); /* 2 */ }

결과 내보내기
Level 1:n location 0240FF48
Level 2:n location 0240FF28
Level 3:n location 0240FF08
Level 4:n location 0240FEE8
Level 4:n location 0240FEE8
Level 3:n location 0240FF08
Level 2:n location 0240FF28
Level 1:n location 0240FF48
우선main()은 매개 변수 1을 사용하여 함수 up 를 호출했습니다and_down (), 그래서 upand_down ()에서 형식 매개 변수 n의 값이 1이기 때문에 인쇄 문장 #1이 Level1을 출력합니다.
그리고 n의 수치가 4보다 작기 때문에 upand_down () (1 단계) 매개 변수 n+1 즉 수치 2로 up 호출and_down () (레벨 2).로 하여금
레벨 호출에 값이 2로 지정되고 플롯 문 #1은 Level2로 출력됩니다.이와 유사하게 다음 두 번의 호출은 각각 Level3과 Level4를 출력합니다.
4급 호출을 시작할 때 n의 값은 4이기 때문에if문장의 조건이 충족되지 않습니다.이 때 upand_down () 함수.레벨 4 호출
n의 값이 4이기 때문에 인쇄문 #2를 실행하여 Level4를 출력합니다.현재 함수는return 문장을 실행해야 합니다. 이 때 4 단계 호출이 끝나면 제어권을 이 문장에 되돌려줍니다.
함수의 호출 함수, 즉 3급 호출 함수.3급 호출 함수 중 이전에 실행된 문장은if문장에서 4급 호출을 진행한다.그래서
후속 코드, 즉 인쇄 문장 #2를 계속 실행하면 Level3이 출력됩니다. 레벨 3 호출이 끝나면 레벨 2 호출 함수가 계속 실행됩니다. 즉, 출력입니다.
Level2. 순서대로 유추한다.
각 단계의 귀환은 자신의 개인 변수를 사용합니다. 주소의 값을 볼 수 있습니다.
반복의 기본 원리:
1 함수 호출마다 한 번씩 되돌아옵니다. 프로그램이 특정한 등급의 귀환의 끝에 실행될 때, 이전 등급의 귀환으로 옮겨져 계속 실행됩니다.
2 귀속 함수 중 귀속 호출 전에 있는 문장과 각급 피조 함수는 같은 순서를 가진다. 예를 들어 인쇄 문장 #1이 귀속 호출 문장 앞에 있으면 귀속 호출 순서에 따라 4차례 집행된다.
3 각 단계의 함수 호출은 모두 자신의 사유 변수를 가지고 있다.
4 귀속 함수 중 귀속 호출 문장 뒤에 있는 문장의 집행 순서는 각 호출 함수의 순서와 상반된다.
5 각 단계마다 자신의 변수가 돌아가지만 함수 코드는 복제되지 않는다.
6 귀속 함수에는 귀속 호출을 중지할 수 있는 언어가 포함되어 있어야 한다

좋은 웹페이지 즐겨찾기