Funcții recursive
Go acceptă funcții recursive. Pentru a fi recursivă, o funcție trebuie să se apeleze pe ea însăși și să ajungă în cele din urmă la o condiție de oprire.
Mai jos, testcount() se apelează pe ea însăși în mod repetat. Datele ei sunt variabila x, iar fiecare apel nou primește o valoare mai mare cu o unitate (x + 1). Odată ce x este egal cu 11 (x == 11), apelurile se opresc.
Exemplu
Ieșire: Program Go și ieșirea capturată
package main
import ("fmt")
func testcount(x int) int {
if x == 11 {
return 0
}
fmt.Println(x)
return testcount(x + 1)
}
func main() {
testcount(1)
}
Exemplu cu factorial
Recursivitatea este o idee des întâlnită atât în matematică, cât și în programare. Avantajul ei este că poți prelucra datele pas cu pas până ajungi la un rezultat.
Totuși, ai grijă când scrii funcții recursive. Este ușor să ajungi la una care nu se termină niciodată sau la una care consumă prea multă memorie sau putere de procesare. Scrisă corect însă, o astfel de funcție poate fi atât foarte eficientă, cât și elegantă din punct de vedere matematic.
În acest exemplu, factorial_recursion() se apelează pe ea însăși, de fiecare dată cu x micșorat cu 1 (x-1). Apelurile se opresc când x nu mai este mai mare decât 0, ceea ce aici înseamnă că a ajuns la 0.
Exemplu
Ieșire: Program Go și ieșirea capturată
package main
import ("fmt")
func factorial_recursion(x float64) (y float64) {
if x > 0 {
y = x * factorial_recursion(x-1)
} else {
y = 1
}
return
}
func main() {
fmt.Println(factorial_recursion(4))
}