再帰関数 パート2
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 58/78。
すべての再帰関数には、同じ2つの部分があります。
- 基本ケースは、いつ停止するかを示します。
- 再帰ステップは、より小さい入力で関数を呼び出します。
nの階乗はn * (n - 1) * ... * 1なので、nの階乗はnにn - 1の階乗を掛けたものです。
func factorial(n: int) -> int:
if n == 1: # 基本ケース
return 1
return n * factorial(n - 1) # 再帰ステップfactorial(5)はfactorial(4)を呼び出し、それがfactorial(3)を呼び出し、factorial(1)まで続きます。factorial(1)は1を返します。戻る際に、各呼び出しで乗算が行われます。結果は120です。
入力は、数値が小さいものである必要はありません。文字列が短くても構いません。この関数は文字列を反転します。
func reverse_text(text: String) -> String:
if text.length() <= 1: # 再帰の基底条件
return text
return reverse_text(text.substr(1)) + text[0]text.substr(1)は、最初の文字を除いた文字列です。関数はその短くなった文字列を反転し、最初の文字を末尾に追加します。文字数が0または1の文字列はすでに反転されているため、これが基本ケースです。
print(reverse_text("hello"))ollehチャレンジ
簡単再帰的な関数 fibonacci を作成してください。この関数は正の整数 n を受け取り、n 番目のフィボナッチ数を返します。
fibonacci(1)は0ですfibonacci(2)は1ですn > 2の場合、fibonacci(n)はfibonacci(n - 1) + fibonacci(n - 2)です
たとえば、fibonacci(6) は 5 を返します(数列は 0, 1, 1, 2, 3, 5 で始まります)。
テストでは fibonacci() を呼び出します。自分で呼び出したり、何かを出力したりしないでください。
自分で試してみよう
func fibonacci(n: int):
# ここにコードを書いてください
pass
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ