再帰関数 パート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回の呼び出しが入れ子になると、エラーを出してプログラムを停止します。
チャレンジ
簡単プログラムは整数 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) を以下に書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ