Mettre en œuvre une fermeture récursive dans Go

introduction

L'étude du langage Go version 2 signifie que j'ai essayé d'étudier les algorithmes avec Go.

Fermeture récursive

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.

  1. J'ai créé une fonction [func fact (n int) int] pour calculer le multiplicateur ci-dessous.

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
  1. J'ai créé une fonction [func fib (n int) int] qui calcule une séquence de nombres de Fibonacci.

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

Sommaire

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

Mettre en œuvre une fermeture récursive dans Go
Implémenter et comprendre l'arborescence de recherche d'union dans Go
Le programmeur Java a touché le langage Go (implémenter l'héritage Java en langage Go)
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Implémenter sum en Python
Implémenter Traceroute dans Python 3
Implémenter LSTM AutoEncoder avec Keras
Implémenter la fonction de suivi dans Django
Implémenter la fonction de minuterie dans pygame
Implémenter le transfert de style avec Pytorch
Implémenter Naive Bayes dans Python 3.3
Implémenter UnionFind (équivalent) en 10 lignes
Implémenter d'anciens chiffrements en python
Hello World en langue GO
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Implémenter le processus gaussien dans Pyro
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Mettre en œuvre un test piloté par table en Java
Implémenter la fonction power.prop.test de R en python
Essayez d'implémenter Yuma en langage Go
Implémenter un paramètre de date dans Tkinter
Implémenter le modèle Singleton en Python
Implémentez rapidement l'API REST en Python
Ecrire un test en langue GO + gin
Faites quelque chose orienté objet dans le langage GO