Implementieren Sie den rekursiven Abschluss in Go

Einführung

Das Studium der Go-Sprache Version 2 bedeutet, dass ich versucht habe, Algorithmen mit Go zu studieren.

Rekursiver Abschluss

Zunächst einmal, was ein Abschluss ist, werde ich den Satz beschreiben, auf den ich unten Bezug genommen habe.

Die anonyme Funktion von Go ist "näher". Verschlüsse werden auf Japanisch als "Funktionsabschluss" bezeichnet und sind mit einer Reihe von "Außenfunktionsumgebungen", die sich auf Funktionen und Funktionsverarbeitung beziehen, "beschränkt (geschlossen)".

Es handelt sich also um eine anonyme Funktion. Dieses Mal habe ich versucht, damit eine rekursive Funktion zu erstellen.

  1. Ich habe eine Funktion [func fact (n int) int] erstellt, um den folgenden Multiplikator zu berechnen.

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)
}

Ausführungsergebnis

❯ go run fact.go
4
24
  1. Ich habe eine Funktion [func fib (n int) int] erstellt, die eine Fibonacci-Zahlenfolge berechnet.

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)
}

Ausführungsergebnis

❯ go run fib.go
10
55

Zusammenfassung

Fmt.Scan () / fmt.Printf () wird für die Eingabe und Ausgabe verwendet. Ich habe jedoch Angst vor der Menge an Ein- und Ausgängen, daher verwende ich Bufio und versuche, es zu puffern.

Recommended Posts

Implementieren Sie den rekursiven Abschluss in Go
Implementieren und verstehen Sie den Union-Find-Baum in Go
Java-Programmierer berührt Go-Sprache (Java-Vererbung in Go-Sprache implementieren)
Implementieren Sie XENO mit Python
Implementieren Sie sum in Python
Implementieren Sie Traceroute in Python 3
Implementieren Sie LSTM AutoEncoder mit Keras
Implementieren Sie die Follow-Funktion in Django
Implementiere die Timer-Funktion im Pygame
Implementieren Sie Style Transfer mit Pytorch
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie UnionFind (gleichwertig) in 10 Zeilen
Implementieren Sie alte Chiffren in Python
Hallo Welt in GO-Sprache
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
Implementieren Sie den Dijkstra-Algorithmus in Python
Implementieren Sie den Slack Chat Bot in Python
Implementieren Sie den Gaußschen Prozess in Pyro
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Implementieren Sie einen tabellengesteuerten Test in Java
Implementieren Sie die Funktion power.prop.test von R in Python
Versuchen Sie, Yuma in der Sprache Go zu implementieren
Implementieren Sie einen Datumssetzer in Tkinter
Implementieren Sie das Singleton-Muster in Python
Implementieren Sie die REST-API schnell in Python
Schreiben Sie einen Test in GO-Sprache + Gin
Machen Sie etwas objektorientiertes in der GO-Sprache