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입니다.