0Pricing
Zig Academy · レッスン

再帰と複数の戻り値

自分自身を呼び出し、処理を分岐させる関数を学びます。

「再帰と複数の戻り値」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 関数の構文と戻り値の型
  2. 値渡しと参照渡し
  3. pub関数と可視性
  4. 再帰と複数の戻り値
← Zig Academyに戻る