私はプログラミングの良い習慣について学び、私はこの質問に固執しています。私は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
}