DOUG 로이드 : 당신은 본 적이있는 경우 재귀에 비디오, 전체 프로세스는있을 수 있습니다 약간의 마법 같았다. 그것은 어떻게 작동합니까? 기능은 어떻게 것을 알고 그들 기다려 다른 값 기다릴 필요 다른 함수에서 반환 우리가 원하는 결과를 얻기 위해 전화를? 음,이 작품 이유는있다 호출 스택으로 알려진 무엇인가. 당신은 함수를 호출 할 때, 시스템 메모리에 공간을 따로 설정 그 기능에 대한 작업을 수행 할 수 있습니다. 그리고 우리는 메모리의이 덩어리를 호출하는 각 기능에 방치되고있다 스택 프레임 또는 기능 프레임을 호출합니다. 그리고 예상대로, 이 스택 프레임 메모리의 스택 부분에 살고있다. 

하나 이상의 함수 스택 프레임 주어진 시간에 메모리에 존재할 수 있습니다. 주요 기능 움직임을 호출하는 경우, 및 이동 방향을 호출, 세 가지 기능 오픈 프레임이 있습니다. 그러나 그들은 활성 프레임을 모든이 없습니다. 이들 프레임은 스택에 배열된다. 그리고에서 프레임 가장 최근에 호출 함수는 스택의 상부에 항상있다. 그리고 항상 활성 프레임입니다. 만 정말 어느 하나있다 한 번에 활성의 기능. 그것은 스택의 상단에있는 하나입니다. 

경우 다른 기능을 호출 기능, 그것은 종류의 일시 정지를 누른다. 그것은 일종의 대기, 보류 중입니다. 그리고 다른 스택 프레임이 밀려 그 위에 스택에. 그리고 그 활성 프레임이됩니다. 프레임 바로 그것은 기다릴 필요가 아래에 그것은 다시 활성 프레임까지 이 작업을 다시 시작하기 전에. 경우 함수이고 완전하고 그것이 이루어집니다, 그 프레임은 스택에서 팝됩니다. 즉, 용어입니다. 프레임 바로 그 아래에, 난 그냥 말한대로, 새 활성 프레임이됩니다. 

그리고 또 다른 함수를 호출하는 경우, 그것은 다시 일시 정지거야. 즉, 새로운 함수의 스택 프레임 것 스택의 최상위로 푸시된다. 이 작업을 할 수 있습니다. 그것은 떨어져 다시 팝업 수 있습니다. 다른 함수 아래는 다시 재개 할 수 있습니다. 

그럼 찾고, 다시 통해 가자 계승 함수의 생각에 우리에 정의 된 재귀 비디오를 볼 수 있습니다 정확히이 뒤의 마법 순환 프로세스가 일어나고있다. 그래서 이것은 우리의 전체 파일은 오른쪽입니까? 우리는 두 가지를 정의 주요 사실 functions--. 그리고 우리는 예상대로, 어떤 C 프로그램은 것입니다 메인의 첫 번째 줄에서 시작합니다. 

그래서 우리는 주를위한 새로운 스택 프레임을 만들 수 있습니다. 그리고 실행을 시작하는 것입니다. 주요 통화는 printf. 그리고 printf의 정보는 다음의 제품에 가고 5의 계승을 인쇄 할 수 있습니다. 글쎄, 그건 알 수 없습니다 5 어떤 요인이며, 그래서이 호출은 이미 다른 함수 호출에 따라. 그래서 기본은 바로 거기에 일시 것입니다. 난 떠날거야 그 바로 거기 색 화살표 그것과 동일한 색상 오른쪽 프레임을 스택, 주요 동결 위하여려고하고 있다는 것을 나타냅니다 5 계승가 호출됩니다 여기에있다. 

그래서 5의 계승가 호출됩니다. 그리고 그것은 매우 시작 것 계승 함수의 시작. 이 질문은 내가 1과 동일하고 묻습니다? 1과 동일한 5인가? 아니, 글쎄. 그래서 아래로 갈 것 다른 부분 반환 n 번 N 마이너스 1의 계승. 좋아, 그럼. 

그래서 지금, 5의 계승이다 다른 통화에 따라 통과, 팩토리얼하기 매개 변수로 4. 그래서 계승의 5 프레임, 빨간색 프레임이, 거기 동결 것입니다 그 라인에서 내가 지시 한 및 완료 4의 계승을 기다리는 그 다음 그래서 그것을 할 필요가 무엇 활성 프레임을 다시 될 수 있습니다. 

그래서에서 4 시작의 팩토리얼 계승의 시작. 1과 동일한 4인가요? 아니, 그래서 같은 일을하는 것입니다. 그것은 다른 지점을 갈 것입니다. 그것은 코드의 라인에 도착하는 것입니다. 좋아, 내가 네 번을 반환거야. 아, 3--의 계승은 정도의 팩토리얼 (4) (3) 마무리의 요인에 따라 달라집니다. 

그리고 그것은 3의 계승를 호출 할 필요가있다. 그리고 그 거 통과있어 다시 동일한 방법. 그것은을 통해 시작 여기에 가져옵니다. 3의 요인이 달려있다 1의 계승에. 2 시작의 그래서 계승, 여기에 가져옵니다. 그것은 하나의 요인에 따라 달라집니다. 1 시작의 계승. 

그래. 그래서 지금, 우리가 있어요 어딘가 흥미, 오른쪽? 그래서 지금, 1은 1과 동일하다. 그래서 우리는 1을 반환합니다. 이 시점에서, 우리는 반환됩니다. 이 함수는 이루어집니다. 그건 문제가있다 is-- 그것은 할에 대해 아무 것도 없다, 그래서 스택 프레임에 대한 1 계승 떨어져 나옵니다. 그것은 끝났어. 그것은 1을 반환. 그리고 지금, 2의 계승, 어떤 프레임은 바로 아래였다 스택에서, 활성 프레임이된다. 

그리고 그것은 선택할 수 있습니다 정확하게는 중단한다. 그것은 계승 기다리고 있어요 (1) 작업을 완료합니다. 그것은 지금 완료되었습니다. 그래서 여기에 우리가 있습니다. 

1의 요인은 1의 값을 반환. 2 캔 그래서 계승 말 2 회 1을 반환합니다. 그 일이 지금 이루어집니다. 그것은 팩토리얼 2를 반환 것 (3), 기다리고 있던있다. 3의 계승은 이제 상단 프레임, 스택의 활성 프레임. 그리고 그것은 확인을, 잘, 내가 갈거야,라고 6 3 회 2를 반환합니다. 그리고 그 줄거야 계승 다시 가치 (4), 나를 기다리고 된. 나는 끝났어요. 3의 계승은 스택을 팝하고, (4)의 요인은 현재 활성화 된 프레임이다. 

4 확인, 내가 4 번을 반환하는거야,라고 여섯 살 3의 계승. 즉 가치였습니다 3의 계승을 반환. 그리고 4 회 6은 24입니다. 그리고 나는 통과 할거야 그 뒷면은 팩토리얼하기 5의, 나를 기다리고 된. 5 계승 이제 활성 프레임입니다. 그것은 5 배를 반환 것 4-- 5 배 (24), 또는 120--의 계승 그 가치를 부여 다시이있는 주에 매우 참을성있게 기다리고 스택의 맨 아래에있는 긴 시간. 

이 시작된 곳이다. 그것은이 전화를했다. 여러 프레임 상단에 인수했다. 이제 다시 스택의 상단에 있습니다. 이 활성 프레임이다. 그래서 주요 값을 얻었다 (120) 다시 5의 계승에서. 그것은을 기다리고 있어요 그 값을 인쇄 할 수 있습니다. 그리고 그것은 이루어집니다. 메인 코드의 더 선은 없습니다. 그래서 메인 프레임은 무효로 스택은, 우리는 완료. 

재귀가 어떻게 작동하는지 그리고 그입니다. 즉 스택 프레임이 작동하는 방법입니다. 이들 함수 호출 그 이전에 무슨 일이 있었 단지 일시에있는 대기 후속 호출에 대한 그래서 그들은 활성화가 될 수칩니다 프레임과 그들이해야 할 일을 마무리합니다. 

나는 더그 로이드입니다. 이 CS50입니다.