중위 함수의 조건
fum main(){
// 일반 표현법
val multi = 3.multiply(10)
// 중위 표현법
val multi = 3 multiply 10
}
// infix 키워드 추가
// Int를 확장해서 multiply() 함수가 하나 더 추가되었음
infix fun Int.multiply(x: Int): Int { // infix로 선언되므로 중위 함수
return this * x
}
재귀(recursion)이란
자기 자신을 다시 참조하는 것을 의미,
재귀 함수는 다시 자신을 계속 호출하는 특징이 있다.
재귀함수의 필수 조건
아래는 일반적인 재귀함수의 형태이다.
fun main() {
val number = 4
val result: Long
result=factorial(number)
println("Factorial: $number -> result")
}
tailrec fun factorial(n: Int, run: Int = 1): Long {
return if (n == 1) n.toLong() else factorial(n, factorial(n-1)
}
사용하게 되면 아래와 같이 스택이 쌓인다.
factorial(4)
4factorial(3)
4(3factorial(2))
4(3(2factorial(1))
4X(3X(2X1)) = 24
아래는 tailrec을 사용한 예제이다.
fun main() {
val number = 5
println("Factorial: $number -> ${factorial(number)}")
}
tailrec fun factorial(n: Int, run: Int = 1): Long {
return if (n == 1) run.toLong() else factorial(n-1, run*n)
}