JS_재귀 콜스택

金秀·2021년 9월 5일
0

JS 개념정리

목록 보기
13/15
post-thumbnail

객관적인 학습자료나 인강이 저의 뇌의 필터를 한 단계 거친 개인적인 의견+ 기억력 휘발 방지용으로 작성된 summary 형식의 메모로그입니다

recursion

The act of self-reference

1.토끼의 삶

규칙 1: 토끼들은 태어난지 셋째 해부터 새끼를 낳습니다.
규칙 2: 매년 두 마리씩 새끼를 낳습니다.
규칙 3: 토끼들은 영원한 삶을 누립니다.

토끼의 수를 계산하는 rabbit 함수에서 n번째 해의 토끼 수는 ?
피보나찌 수열

한 해의 토끼 수 : 1년 전의 토끼수 + 2년 전의 토끼수

rabbits(n) = rabbits(n - 1) + rabbits(n - 2);

4번째 해의 토끼수

rabbits(4) = rabbits(4 - 1) + rabbits(4 - 2);
rabbits(4) = rabbits(3) + rabbits(2);

2.termination case

function rabbits(n) {
  return rabbits(n - 1) + rabbits(n - 2);
}

재귀는 끝이 없기 때문에
반드시 Termination case / 리턴케이스가 있어야함

Call Stack

스택 책을 쌓는 것처럼 쌓이는 구조이고, 뺄 때는 위에서부터 빠짐
콜스택 콜(함수호출)이 쌓이는 것.

-여러 함수들을 호출하는 상황에서 해당 위치를 추적하는 자바스크립트 엔진을 위한 메커니즘
-현재 어떤 함수가 동작하고있는지, 그 함수 내에서 어떤 함수가 호출되는지, 다음에 어떤 함수가 호출되어야 하는지 등을 추적

콜스택 규칙

1.함수가 호출되면 콜스택에 쌓임
2.A안에 있는 함수B가 호출되면 A위에 B가 쌓인다.
3.함수가 종료/리턴이 되면 콜스택이 빠지고, 그 함수 아래 함수의 실행이 시작!
4.콜스택이 과도해지면 ,Stack Overflow발생함

예1)
sqaure => 제곱
실행순서
PrintSquare(제일 마지막에 쌓였으니 처음 실행) => Square => mutiply (얘는 연산하고 리턴함 , 콜스택에서 빠짐, => 스퀘어도 빠짐 => 프린트 스퀘어도 빠짐 )
콜스택 empty !!

😺실제로 코드 안에 debugger; 넣고 개발자 로그로 확인 해보기

예2)
똑같은 함수지만 실행 컨텍스트가 다르면 2개가 쌓일 수도 있음
rabbit 콜스택이 계속 쌓임..
함수 실행문은 그 함수의 return 값으로 대체됨!!
함수실행문 => 함수() === 리턴값

추가학습 자료

https://ko.javascript.info/recursion

profile
기록하기

0개의 댓글

관련 채용 정보