재귀 및 스택 작동 방법을 배우고 있습니다. 이 함수에서 스택 추적을 이해하는 데 문제가 있으며 내 console.log 문이 무엇을하는지 설명하는 데 문제가 있습니다.재귀 함수 스택 추적 이해
function expoRecursion(base, exp) {
debugger;
if(exp == 1) {
console.log('the exp value is ' + exp + ' , base is returned');
return base;
} else {
console.log('line 278 the function evaluates ' + expoRecursion(base, exp -1));
return base * expoRecursion(base, exp-1);
}
}
expoRecursion(2,3);
내가 크롬 개발 도구에서 이것을 실행하고 그것을 통해 강화하지만, 기본 케이스 후 경험치가 1 때 반환되는 이유의 본질을 얻을 수없는 것, 우리는 (2, 2 expoRecursion 팝 -1), expoRecursion (2, 3-1)로 이동 한 다음, 이미 평가 된 경우 expoRecursion (2, 2-1) 스택에 다시 추가 하시겠습니까?
the exp value is 1 , base is returned
line 278 the function evaluates 2
the exp value is 1 , base is returned
line 278 the function evaluates 4
the exp value is 1 , base is returned
line 278 the function evaluates 2
the exp value is 1 , base is returned
왜 마지막 문장 2는 다음 최종 반환 값이 8로 다시 온다 : 그런 혼란은 읽어 내 로그 문에서 오는 것 같다?
결과'console.log (..... expoRecursion (base, exp -1));을 기록하기 위해'expoRecursion' 함수를 호출하여 새로운 재귀를 생성합니다. – Titus
로그 문과 return 문 모두 재귀를 호출합니다. 아마 당신이 원하는 것이 아닙니다. – pvg
젠장, 내가 console.log 문에서 함수를 agin 함수를 호출하고 있다는 것을 깨닫지 못했다. –