再帰と複数の戻り値
自分自身を呼び出し、処理を分岐させる関数を学びます。
「再帰と複数の戻り値」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
自分自身を呼び出す関数
再帰とは、関数が同じ問題のより小さな部分を解くために、自分自身を段階的に呼び出すことです。🔁
再帰には必ずベースケースが必要
ベースケースは停止条件です。これがないと関数は永遠に自分自身を呼び出し続け、スタックがあふれます。
再帰ケース
再帰ケースでは、より小さな入力に対して関数を再び呼び出し、ベースケースへ着実に近づけます。
fn factorial(n: u64) u64 {
if (n <= 1) return 1;
return n * factorial(n - 1);
}小さな呼び出しを追跡する
factorial(3)を呼び出すと3 * factorial(2)、続いて2 * factorial(1)になります。ベースケースが1を返し、結果が戻りながら掛け合わされます。
再帰はスタックを使う
呼び出しのたびにスタックへフレームが追加されます。深くなりすぎるとスタックオーバーフローが起きるため、再帰の深さは適切に保ってください。
多くの問題はループで書ける
再帰で書ける処理は、ループでも書けます。ループは余分なスタックフレームを使わないため、多くの場合より安全な選択です。
fn factorial(n: u64) u64 {
var acc: u64 = 1;
var i: u64 = 2;
while (i <= n) : (i += 1) acc *= i;
return acc;
}関数が返す型は1つ
Zigの関数が持つ戻り値の型は1つですが、その型の値を返すreturn文は複数記述できます。
早期returnで分岐する
異なる分岐から早期returnできます。どの経路でも宣言された型の値を返し、その時点で関数を終了します。
fn sign(n: i32) i32 {
if (n > 0) return 1;
if (n < 0) return -1;
return 0;
}構造体で複数の値を返す
複数の値を返すには、それらを1つの結果にまとめた構造体またはタプルを返します。
fn divmod(a: u32, b: u32) struct { q: u32, r: u32 } {
return .{ .q = a / b, .r = a % b };
}結果を展開する
呼び出し元では、result.qやresult.rのように名前でフィールドを読み取り、返された各値を利用します。
const res = divmod(7, 2);
// res.q is 3, res.r is 1エラーも返す
関数はエラーユニオンを返すこともできます。これにより、ある分岐では失敗を通知し、別の分岐では通常の値を返せます。
クイックチェック
再帰関数を書きましたが、停止せずにクラッシュします。最も可能性が高いのは、何を忘れたのでしょうか?
まとめ
再帰にはベースケースと、入力を小さくする再帰呼び出しが必要です。関数の戻り値の型は1つですが、戻り経路は複数持てます。構造体を使えば複数の結果をまとめられます。🎯
よくある質問
「再帰と複数の戻り値」レッスンは無料ですか?
はい。「再帰と複数の戻り値」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「再帰と複数の戻り値」で何を学びますか?
自分自身を呼び出し、処理を分岐させる関数を学びます。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「再帰と複数の戻り値」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 関数の構文と戻り値の型
- 値渡しと参照渡し
- pub関数と可視性
- 再帰と複数の戻り値