/** * 第 2 章 · 环境搭建 — Fibonacci 示例 * * 演示了: * - 顶层函数定义 * - val / var * - 显式类型转换 (toLong) * - repeat 标准库函数 * - Range (0..9) 与 forEach * - 字符串模板 ($i / ${expression}) * * 运行方式: * kotlinc Fibonacci.kt -include-runtime -d fib.jar * java -jar fib.jar */ fun fib(n: Int): Long { if (n <= 1) return n.toLong() var a = 0L var b = 1L repeat(n - 1) { val tmp = a + b a = b b = tmp } return b } fun main() { println("斐波那契数列前 10 项:") (0..9).forEach { i -> println("fib($i) = ${fib(i)}") } println() println("=== 使用尾递归优化版 ===") println("fib(50) = ${fibTailrec(50)}") } /** * 尾递归版 —— 用 tailrec 关键字让编译器把递归转成循环,避免栈溢出。 * 这是 Kotlin 的"小心机"特性,Java 里写不出来。 */ tailrec fun fibTailrec(n: Int, a: Long = 0L, b: Long = 1L): Long { if (n == 0) return a return fibTailrec(n - 1, b, a + b) }