function isOdd(num) {
//base case
if (num === 1) {
return true
}
//base case
if (num === 2 || num === 0) {
return false
}
//recursive case
if (num < 0) {
return isOdd(-num)
}
//recursive case
return isOdd(num - 2)
}
isOdd(9)
if (num === 1) {
return true
}
if (num === 2 || num === 0) {
return false
}
base case 모두 충족 되지않아 재귀 함수 진행
return isOdd(num - 2)
num = 9
9 => 7 => 5 => 3 => 1
num = 1
function isOdd(1) {
if (num === 1) {
return true
}
isOdd(1) = true;
num = 3
function isOdd(3) {
if (num === 1) {
return true
}
if (num === 2 || num === 0) {
return false
}
if (num < 0) {
return isOdd(-num)
}
return isOdd(3 - 2)
//isOdd(1)
//true
}
isOdd(3) = true;
num = 5
function isOdd(5) {
if (num === 1) {
return true
}
if (num === 2 || num === 0) {
return false
}
if (num < 0) {
return isOdd(-num)
}
return isOdd(5 - 2)
// isOdd(3)
// true
}
isOdd(5) = true
num = 7
function isOdd(7) {
if (num === 1) {
return true
}
if (num === 2 || num === 0) {
return false
}
if (num < 0) {
return isOdd(-num)
}
return isOdd(7 - 2)
// isOdd(5)
// true
}
isOdd(7) = true
num = 9
function isOdd(9) {
if (num === 1) {
return true
}
if (num === 2 || num === 0) {
return false
}
if (num < 0) {
return isOdd(-num)
}
return isOdd(9 - 2)
// isOdd(7)
// true
}
isOdd(9) = true
return value = true;
isOdd(-9)
0보다 작을때 조건문 재귀함수 적용
if (-9 < 0) {
return isOdd(-(-9))
}
위와 같이 재귀함수가 적용되며
마지막에 재귀를통한 return value를 갖이고
if (num < 0) {
return isOdd(-num)
}
여기서 탈출 한다
function isOdd(9) {
if (num === 1) {
return true
}
if (num === 2 || num === 0) {
return false
}
if (num < 0) {
return isOdd(-num)
}
return isOdd(9 - 2)
// isOdd(7)
// true
}
isOdd(9) = true
if (num < 0) {
return isOdd(-9)
// isOdd(-9)에서 isOdd의 true값을 가지고 탈출한다
}
isOdd(-9) = true