Skip to content

Latest commit

 

History

History
26 lines (20 loc) · 767 Bytes

Kotlin尾递归.md

File metadata and controls

26 lines (20 loc) · 767 Bytes

Kotlin尾递归

使用递归的方法求阶乘

class Result(var value: BigInteger = BigInteger.valueOf(1L))

tailrec fun factorial(num: Int, result: Result) {
    if (num == 0) {
        result.value = result.value.times(BigInteger.valueOf(1L))
    } else {
        result.value = result.value.times(BigInteger.valueOf(num.toLong()))
        factorial(num - 1, result)
    }
}

fun main(args: Array<String>) {
    var result = Result()
    factorial(1000000, result)
    println(result.value)
}

PStailrec关键字表示使用尾递归的方式执行

如果使用一般的递归的话,计算大数的阶乘时会发生StackOverFlow,而使用尾递归则不会发生这种情况。(本质上是把递归转换为迭代了)