再帰関数
CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 8/68。
再帰は、関数が問題を解決するために自身を呼び出すプログラミング手法です。これによりループのような動作が作成されますが、従来のループを使用する代わりに、関数は解決策に到達するまで変更されたパラメータを使用して繰り返し自身を呼び出します。
すべての再帰関数が正しく動作するためには、2つの不可欠な要素が必要です。
ベースケース: これは再帰を停止させる条件です。これがないと、関数は自分自身を無限に呼び出し続け、プログラムがクラッシュする原因となります。ベースケースは、関数が自分自身を再び呼び出す代わりに、いつ結果を返すべきかを定義します。
再帰ステップ: これは、関数が元の問題を修正した状態で自身を呼び出し、徐々にベースケースへと近づいていく段階です。
階乗を計算する再帰関数の簡単な例を以下に示します:
<?php
function factorial($n) {
// ベースケース:1の階乗は1です
if ($n <= 1) {
return 1;
}
// 再帰ステップ:n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // 出力:120
?>この例では、factorial(5) は factorial(4) を呼び出し、それが factorial(3) を呼び出し、というように factorial(1)(ベースケース)に達するまで繰り返されます。その後、結果が順に掛け合わされます:1 × 2 × 3 × 4 × 5 = 120。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単正の整数を受け取り、その各桁の合計を返す sumDigits という名前の再帰関数を作成してください。この関数は、再帰を使用して数値を桁ごとに分解する必要があります。
1つの入力を受け取ります:正の整数です。入力を読み込み、その数値を使用して再帰関数を呼び出し、各桁の合計を出力してください。
入力形式: 正の整数を含む1行
期待される出力: 数値のすべての桁の合計
チートシート
再帰は、関数が自分自身を呼び出して問題を解決するプログラミング手法です。すべての再帰関数には、2つの構成要素が必要です。
ベースケース: 無限ループを防ぐために再帰を停止させる条件です。
再帰ステップ: 関数がパラメータを変更して自分自身を呼び出し、ベースケースに近づいていく部分です。
再帰的な階乗関数の例:
<?php
function factorial($n) {
// ベースケース: 1の階乗は1です
if ($n <= 1) {
return 1;
}
// 再帰ステップ: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // 出力: 120
?>自分で試してみよう
<?php
// 入力を読み込む
$number = intval(fgets(STDIN));
// TODO: ここに再帰関数 sumDigits を作成してください
// 関数を呼び出して結果を出力する
echo sumDigits($number);
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。