Рекурсия в GO
НАВИГАЦИЯ ПО СТРАНИЦЕ
Рекурсия — это техника, при которой функция вызывает саму себя.
Простой пример факториал а
Факториал числа n (обозначается как n!) — это произведение всех положительных целых чисел от 1 до n. Рекурсивная функция для вычисления факториала может выглядеть следующим образом:
package main
import "fmt"
func factorial(n int) int {
if n <= 1 {
return 1
}
return n * factorial(n-1)
}
func main() {
result := factorial(5)
fmt.Println(result) // Вывод: 120
}
В этом примере factorial вызывает саму себя с уменьшением аргумента n до 1, и результаты перемножаются на каждом уровне вызова.
Пример обхода дерева
Рекурсия также может быть полезной для обхода структур данных, таких как деревья. Рассмотрим пример простого бинарного дерева и рекурсивной функции для его обхода:
package main
import "fmt"
type Node struct {
Value int
Left, Right *Node
}
func traverseTree(node *Node) {
if node == nil {
return
}
traverseTree(node.Left)
fmt.Println(node.Value)
traverseTree(node.Right)
}
func main() {
// Пример бинарного дерева
root := &Node{Value: 1,
Left: &Node{Value: 2, Left: nil, Right: nil},
Right: &Node{Value: 3, Left: nil, Right: nil},
}
traverseTree(root)
}
Этот код рекурсивно обходит бинарное дерево слева направо и выводит значения узлов.
При использовании рекурсии важно уделять внимание базовому случаю, чтобы избежать бесконечного выполнения.