Рекурсивные функции в Golang

GolangGolangBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот лаба проверит ваше понимание рекурсивных функций в Golang.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/FunctionsandControlFlowGroup(["Functions and Control Flow"]) go/FunctionsandControlFlowGroup -.-> go/recursion("Recursion") subgraph Lab Skills go/recursion -.-> lab-15501{{"Рекурсивные функции в Golang"}} end

Рекурсия

Функция sum принимает срез целых чисел и возвращает сумму всех целых чисел в срезе. Однако, функция неполная и требует реализации с использованием рекурсии.

  • Функция sum должна быть реализована с использованием рекурсии.
  • Функция должна принимать срез целых чисел в качестве входных данных.
  • Функция должна возвращать сумму всех целых чисел в срезе.
$ go run recursion.go
5040
13

Ниже представлен полный код:

// Go поддерживает
// <a href="https://en.wikipedia.org/wiki/Recursion_(computer_science)"><em>рекурсивные функции</em></a>.
// Вот классический пример.

package main

import "fmt"

// Эта функция `fact` вызывает сама себя, пока не достигнет
// базового случая `fact(0)`.
func fact(n int) int {
	if n == 0 {
		return 1
	}
	return n * fact(n-1)
}

func main() {
	fmt.Println(fact(7))

	// Заключения также могут быть рекурсивными, но для этого
	// замыкание должно быть объявлено с явно заданным
	// типизированным `var` перед его определением.
	var fib func(n int) int

	fib = func(n int) int {
		if n < 2 {
			return n
		}

		// Поскольку `fib` было ранее объявлено в `main`, Go
		// знает, какую функцию вызвать при использовании `fib` здесь.
		return fib(n-1) + fib(n-2)
	}

	fmt.Println(fib(7))
}

Резюме

В этом лабе вам предстояло реализовать функцию sum с использованием рекурсии. Рекурсия - это мощный инструмент, который позволяет упростить сложные задачи, разбивая их на более мелкие подзадачи. Завершив этот лаба, вы должны теперь иметь лучше понимание того, как использовать рекурсию в Golang.