간단한 경우부터 살펴보자.(팩토리얼)
위에 예제를 보면 규칙이 보인다.
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 결과값
}
위에 팩토리얼을 해석하자면