Q1. 함수의 인자로 들어오는 정수가 홀수인지 아닌지 확인하기


풀이 단계 1 - 재귀에서 기초가 되는 값을 작성하자

function isOddNumber(num){
   // 단계 1. num이 0 일 경우 -> false
   if (num === 0){
      return false;
   }

   // 단계 2. 연산의 기초값 -> 최종적으로 num이 1이 된다면 true
   if (num === 1){
      return true;
   }
}


풀이 단계 2 - num이 음수일 때 어떻게 재귀를 돌리고, 최종적으로 재귀는 어떻게 형성시킬까?

function isOddNumber(num) {
   // 단계 1. num이 0 일 경우 -> false
   if (num === 0) {
      return false;
   }

   // 단계 2. 연산의 기초값 -> 최종적으로 num이 1이 된다면 true
   if (num === 1) {
      return true;
   }

   // 단계 3. num < 0 일때.
   if (num < 0) {
     return isOddNumber(-num) // num을 양수로 변경시켜서 다시 작동시킨다.
   }

   // 단계 4. 최종적으로 우리는...
   // num을 최종적으로 2를 빼가면서 1이 되는지를 봐야지!
   return isOddNumber(num - 2)
}


이 문제를 풀면서 재귀로 사고하는 과정을 기르기에 가장 충분한 문제였지 않았나 하고 생각했다. 규칙을 찾고 단순화 시킬 수 있는 패턴이 있는지 보고 적절하게 단순화 시키는 것. 그것이 지금까지 내가 이해한 재귀다.


Q2. 두 정수가 주어질 때, 첫번째 숫자부터 두번째 숫자 전까지 모든 수의 곱 구하기

반복적인 규칙이 한 번에 눈에 들어왔다. 앞에서 정의해준 규칙들만 잘 추려주면 쉽게 문제를 해결하지 싶었다.

function  multiple  (num1, num2)  {
   
   // 조건 1. 두 수가 같거나, num2가 num1 보다 작다면?
   if (num2 <= num1>) {
      return 0
   }

   // 조건 2. 두 수의 차이가 1이면 앞에서 리턴
   if  (num2  -  num1  === 1) {
      return num1
   }

   // 조건 3. 재귀!
   return multiple(num1, num2 - 1) * (num2 - 1)
}