RosettaCodeData/Task/Fibonacci-sequence/Kotlin/fibonacci-sequence.kotlin

32 lines
701 B
Plaintext

enum class Fibonacci {
ITERATIVE {
override fun invoke(n: Long) = if (n < 2) {
n
} else {
var n1 = 0L
var n2 = 1L
var i = n
do {
val sum = n1 + n2
n1 = n2
n2 = sum
} while (i-- > 1)
n1
}
},
RECURSIVE {
override fun invoke(n: Long): Long = if (n < 2) n else this(n - 1) + this(n - 2)
};
abstract operator fun invoke(n: Long): Long
}
fun main(a: Array<String>) {
val r = 0..30L
Fibonacci.values().forEach {
print("${it.name}: ")
r.forEach { i -> print(" " + it(i)) }
println()
}
}