我尝试了解编程中的良好实践,并坚持这个问题。我知道在Java中,递归函数可能是'屁股疼痛'(有时),我尽可能实现该函数的尾部版本。这是值得一提的,或者我应该以旧式的方式做? 有(在科特林)这两种功能之间的任何差别:当使用Java/Kotlin进行编程时,建议使用尾递归或迭代版本?性能有什么不同?
tailrec fun tail_fibonacci(n : BigInteger, fib1 : BigInteger = BigInteger.ZERO , fib2 : BigInteger = BigInteger.ONE) :
BigInteger {
return when(n){
BigInteger.ZERO -> fib1
else -> tail_fibonacci(n.minus(BigInteger.ONE),fib1.plus(fib2),fib1)
}
}
fun iterative_fibonacci(n: BigInteger) : BigInteger {
var count : BigInteger = BigInteger.ONE
var a : BigInteger = BigInteger.ZERO
var b : BigInteger = BigInteger.ONE
var c : BigInteger
while(count < n){
count += BigInteger.ONE
c = a + b
a = b
b = c
}
return b
}