Go 语言中的递归函数

GolangGolangBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验将测试你对 Go 语言中递归函数的理解。


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{{"Go 语言中的递归函数"}} 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 函数。递归是一种强大的工具,它可以通过将复杂问题分解为更小的子问题来简化问题。通过完成本实验,你现在应该对如何在 Go 语言中使用递归有了更好的理解。