L'étude du langage Go version 2 signifie que j'ai essayé d'étudier les algorithmes avec Go.
Tout d'abord, qu'est-ce qu'une clôture, je décrirai la phrase à laquelle j'ai fait référence ci-dessous.
La fonction anonyme de Go est "plus proche". Les fermetures sont appelées «fermeture de fonction» en japonais, et sont «confinées (fermées)» avec un ensemble d'environnements de «fonction extérieure» liés aux fonctions et au traitement des fonctions.
Cela représente donc une fonction anonyme. Cette fois, j'ai commencé par essayer de créer une fonction récursive en utilisant ceci.
fact.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
r := bufio.NewReader(os.Stdin)
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
var a int
fmt.Fscan(r, &a)
result := solveFact(a)
fmt.Print(result)
}
func solveFact(x int) int {
var fact func(n int) int
fact = func(n int) int{
if n == 0{ return 1 }
return n * fact(n - 1)
}
return fact(x)
}
Résultat d'exécution
❯ go run fact.go
4
24
fib.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
r := bufio.NewReader(os.Stdin)
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
var a int
fmt.Fscan(r, &a)
result := solveFib(a)
fmt.Print(result)
}
func solveFib(x int) int {
var fib func(n int) int
fib = func(n int) int{
if n <= 1{return n}
return fib(n -1) + fib(n - 2)
}
return fib(x)
}
Résultat d'exécution
❯ go run fib.go
10
55
Fmt.Scan () / fmt.Printf () est utilisé pour l'entrée et la sortie. Cependant, j'ai peur de la quantité d'entrée et de sortie, donc j'utilise bufio et j'essaye de le tamponner.
Recommended Posts