对于大输入,为什么尾递归阶乘的输出为零?

问题描述 投票:0回答:1

我是学习Kotlin的新手。我尝试在代码中使用尾部递归来计算阶乘,但是当我输入99999时,输出为0。这是我的代码:

fun main(){
    println(factTailRec(99999))
}
tailrec fun factTailRec(number: Int, result: Int = 1): Long{
    return if(number.toInt() == 1){
        result.toLong()
    } else {
        factTailRec(number-1, result*number)
    }
}
kotlin tail-recursion
1个回答
0
投票
您的result类型的Int不足以保存实际结果值。您需要类似BigInteger的内容:

tailrec fun factTailRec(number: Int, result: BigInteger = ONE): BigInteger{ return if(number == 1){ result } else { factTailRec(number-1, result.multiply( BigInteger.valueOf(number.toLong()) )) } } fun main(){ println(factTailRec(99999)) }

© www.soinside.com 2019 - 2024. All rights reserved.