Recursive call (재귀호출)

간단한 경우부터 살펴보자.(팩토리얼)

위에 예제를 보면 규칙이 보인다.

n! = n x (n -1)! → 4 x 3! 랑 동일

코드를 통해 살펴보자

fun main() {
    for (i in 0..10) {
        println(test(i))
    }
}

// 1번 형태
fun test(num: Int): Int {
    return if (num > 1) {
        num * test(num - 1)
    } else {
        num
    }
}

// 2번 형태
fun test(num: Int): Int {
    if (num <= 1) {
        return num
    }

    return num * test(num - 1)
}

--------result------
0
1
2
6
24
120
720
5040
40320
362880
3628800

재귀 호출의 일반적인 형태로는 2가지 경우가 있다.

// 1번 형태
fun test(입력): 리턴 {
    if (입력 > 일정값) { // 입력이 일정 값 이상이라면
        return 재귀호출(입력 - 1) // 입력보다 작은 값
    } else {
        return 일정값, 입력값 또는 특정값 // 재귀 호출 종료
    }
}

// 2번 형태
fun test(입력): 리턴 {
    if (입력 <= 일정값) {
        return 일정값, 입력값 또는 특정 값 // 재귀 호출 종료
    }
    
    재귀호출(입력보다 작은 값) // 이 경우 if문에서 return되면 호출 되지 않음
    return 결과값
}

위에 팩토리얼을 해석하자면