Goってポリシーとして末尾最適しないからfibそんな速くないでしょ、みたいなクソリプを思いついてしまったのでエアリプ。 package main import "fmt" func main() { fmt.Println(fib(40)) } func fib2(n uint64) (uint64, uint64) { if n == 1 { return 1, 0 } prev, prevprev := fib2(n - 1) return prev + prevprev, prev } func fib(n uint64) uint64 { f, _ := fib2(n) return f } 2つ値を返せばいい。 % time ./fib 102334155 ./fib 0.00s user 0.00s system 18% cpu 0.027 total 速い! あわせて読みたい
![再帰したって速いフィボナッチは書けるよ | おそらくはそれさえも平凡な日々](https://cdn-ak-scissors.b.st-hatena.com/image/square/44fc27d71b62444cac921d824d82f54b46f499e2/height=288;version=1;width=512/https%3A%2F%2Fsongmu.jp%2Friji%2Fstatic%2Fimg%2Fsongmu-ogp.jpg)