본문 바로가기
( ´・・)/개발

[JavaScript] 재귀 (Recursive)

by shinsangah 2023. 5. 8.

재귀 (Recursive)

📎재귀 (Recursive)

하나의 함수에서 함수 자기 자신을 다시 내부에서 호출해서 사용하는 방법
기본적으로 무한 동작하기 때문에 필요에 따라서 멈춰줄 수 있어야 한다.

const a = () => {
  console.log("A");
  a();
// 함수를 호출하는 코드를 함수 밖이 아닌 함수 안에 작성
// a 라는 함수를 자신의 영역 내부에서 다시 호출하는 것을 함수 '재귀' 라고 한다.
};

a();

a함수가 최초 실행이 되고, 그 다음에 내부에 있는 a 라는 자기 자신이 호출이 되면서
또 그 아래에 있는 자기 자신이 호출이 되고, 이런 방식으로 '무한정' 함수가 동작하게 된다.
함수가 무한 호출 되기 때문에 필요에 따라 멈춰줘야 한다.

let i = 0;
const a = () => {
  console.log("A"); // A A A A
  i += 1; // a 라는 함수가 호출될 때마다 1씩 증가, 0부터 시작해서 0, 1, 2, 3 까지 재귀 호출 가능
  if (i < 4) {
    a();
  }
};

a();

재귀 호출하게 되면 무한으로 반복 실행이 되기 때문에
항상 이렇게 멈출 수 있는 조건을 포함해줘야 한다. ▽

  if (i < 4) {
    a();
  }
const userA = { name: "A", parent: null };
const userB = { name: "B", parent: userA };
const userC = { name: "C", parent: userB };
const userD = { name: "D", parent: userC };

const getRootUser = (user) => {
  if (user.parent) {
    return getRootUser(user.parent);
  }
  return user;
};

console.log(getRootUser(userD)); // { name: "A", parent: null }
console.log(getRootUser(userC)); // { name: "A", parent: null }
console.log(getRootUser(userB)); // { name: "A", parent: null }
console.log(getRootUser(userA)); // { name: "A", parent: null }