mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-11-05 14:03:45 +00:00
39 lines
616 B
Go
39 lines
616 B
Go
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
|
|
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
|
|
// See page 218.
|
|
|
|
// Spinner displays an animation while computing the 45th Fibonacci number.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
//!+
|
|
func main() {
|
|
go spinner(100 * time.Millisecond)
|
|
const n = 45
|
|
fibN := fib(n) // slow
|
|
fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN)
|
|
}
|
|
|
|
func spinner(delay time.Duration) {
|
|
for {
|
|
for _, r := range `-\|/` {
|
|
fmt.Printf("\r%c", r)
|
|
time.Sleep(delay)
|
|
}
|
|
}
|
|
}
|
|
|
|
func fib(x int) int {
|
|
if x < 2 {
|
|
return x
|
|
}
|
|
return fib(x-1) + fib(x-2)
|
|
}
|
|
|
|
//!-
|