Задание номер 26 в Туре Го.
Реализуйте функцию Фибоначчи, которая возвращает функцию (замыкание), возвращающую последовательные числа Фибоначчи (0, 1, 1, 2, 3, 5, …).
Решение:
Числа Фибоначчи — это когда каждое следующее число является суммой двух предыдущих. Сначала я сделал простой с точки зрения логики вариант, но он не соотносится с техзаданием.. Поэтому пришлось переделать.
package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { n1 := 0 n2 := 1 return func() int { // return n1 + n2.. save previous values and again /* sum := n1 + n2 n1 = n2 n2 = sum return sum // doesn't start with 0.. our goal is to print _1st_ number, not a summ // we must return no the third number, but 1st number! but calculate next ones */ // 1) save n1 as tmp (we are gonna to print-return it!) // 2) save n2 as n1 // 3) complete operation n1 + n2 and save it as n2 // 4) return tmp tmp := n1 n1 = n2 n2 = tmp + n2 return tmp } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }
А вот, кстати, программа, которая позволяет найти n-ый член последовательности Фибоначчи при помощи рекурсии:
package main import "fmt" func fib(n int) int { if n < 2 { return n } return fib(n - 1) + fib (n - 2) } func main () { var n int fmt.Print("Which element of Fibonacci sequence to show? ") fmt.Scanf("%d", &n) fmt.Println(fib(n)) }
Ну и обычный способ на цикле for
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { r := bufio.NewReader(os.Stdin) input, _ := r.ReadString('\n') trim := strings.TrimSpace(input) n, _ := strconv.Atoi(trim) var n1 int = 0 var n2 int = 1 for i := 0; i < n; i++ { tmp := n1 n1 = n2 n2 = tmp + n2 fmt.Println(tmp) } }
Серверную часть игры на Go решил делать? Да, неплохой вариант для быстрого старта, возможно в этом и есть смысл. Замечу, что один из авторов языка Go — Кен Томпсон, он же соавтор и языка Си, поэтому и похож.
да.. у меня кроме серверной части и не будет ничего, игра текстовая, на менюшках js весь UI