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言語で再帰をどのように使うかをより深く理解したはずです。