알고리즘 - toy 1번문제

디버깅을 세 번 정도 해보니까 이해가 된다… 반복문 안에서 재귀가 실행될때 반복문이 어떻게 진행되는지 이해가 되지 않으면 어려운 문제였다…!

const rockPaperScissors = function (rounds) {
//rounds입력받지 않으면 3판
  rounds = rounds || 3;
//가위바위보 경우를 작성해준다.
  const rps = ['rock', 'paper', 'scissors'];
//결과값을 출력해줄 빈배열 선언
  const outcomes = [];
//재귀돌려줄 보조 함수 선언. playedsoFar라는 매개변수는 계속 컨캣된다.
  let permutate = function (roundsToGo, playedSoFar) {
//bare 조건. 1씩 줄어드는 roundsToGo 가 0이되면 완성된 playedSoFar를 결과값에 푸시해준다.
    if (roundsToGo === 0) {
      outcomes.push(playedSoFar);
 //아무것도 출력하지 않는다. 결과값에 대한추가는 push 로 이미 해주었기 때문. 해당 스코프를 종료한다.
      return;
    }
 // 반복문을 돌면서 playedSoFar 를 완성해나간다.
 //재귀를 돌리는데 bare 조건에서 걸리지 않는다면 playedSoFar의 값은 계속 컨캣된다.
    for (let i = 0; i < rps.length; i++) {
      let currentPlay = rps[i];
      permutate(roundsToGo - 1, playedSoFar.concat(currentPlay));
    }
  };
  permutate(rounds, []);
//결과값 출력
  return outcomes;
};

Updated: