Go в примери: Самоизвикване

Go поддържа самоизвикващи се функции1. Тук имаме класически пример.


  1. recusrsion – самоизвикване, рекурсия – https://ru.wikipedia.org/wiki/Рекурсивная_функция
package main
import "fmt"

Тази функция fact извиква себе си докато достигне първичния си случай fact(0).

func fact(n int) int {
    if n == 0 {
        return 1
    }
    return n * fact(n-1)
}
func main() {
    fmt.Println(fact(7))

Безименните функции също могат да се самоизвикват, но е нужно преди това да обявим променлива с помощта на var, за да съхраним препратка към вида на функцията преди да ѝ дадем определение. Така всъщност я именуваме.

    var fib func(n int) int
    fib = func(n int) int {
        if n < 2 {
            return n
        }

Понеже fib е обявена предварително в main, Go знае коя функция, с име fib, да извика тука.

        return fib(n-1) + fib(n-2)
    }
    fmt.Println(fib(7))
}
$ go run recursion.go 
5040
13

Следващ пример: .