Menu
CoddyTech

再帰関数 パート1

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 57/78。

再帰的な関数とは、自分自身を呼び出す関数です。各呼び出しで問題のより小さなバージョンを解決し、問題が直接答えられるほど小さくなるまで続けます。

この関数は1からnまでの整数を合計します。

func sum_to_n(n: int) -> int:
	if n == 0: # 基本ケース
		return 0
	return n + sum_to_n(n - 1) # 再帰ステップ

2つの部分があります。

  • 基本ケースは、関数を再度呼び出さずに答えを返します。0までの合計は0です。
  • 再帰ステップは、より小さい値n - 1で関数を呼び出し、その結果から答えを組み立てます。

sum_to_n(3) は 3 + sum_to_n(2) であり、これは 3 + 2 + sum_to_n(1)、さらに 3 + 2 + 1 + sum_to_n(0) です。基底ケースは 0 を返し、待機していた呼び出しが一つずつ完了します。結果は 6 です。

再帰の各ステップは、ベースケースに近づかなければなりません。ベースケースがない場合や、n + 1のようにベースケースに到達しないステップがある場合、関数は自分自身を呼び出し続けます。Godotでは、約1,000回の呼び出しが入れ子になると、エラーを出してプログラムを停止します。

challenge icon

チャレンジ

簡単

プログラムは整数 n(0以上)を読み取り、count_down(n)を呼び出します。

_ready()の下に、引数を1つ取る再帰関数 count_downを書きます。この関数は、引数から0までのすべての数を1行に1つずつ出力します。ループは使わず、関数はその数を出力してから、次に小さい数を引数として自分自身を呼び出します。

入力が3の場合、出力は次のとおりです。

3
2
1
0

自分で試してみよう

extends Node

func _ready():
	var n := int(OS.read_string_from_stdin())
	count_down(n)

# 再帰関数 count_down(n) を以下に書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ