基本情報技術者試験 (FE) 科目 B — 擬似言語

関数と手続き — ○ から始まる定義の読み方

定義

擬似言語の関数定義は ○ から始まる。戻り値を持つ関数は「○戻り値型: 名前(引数の型: 引数名, ...)」、戻り値のない手続きは「○名前(引数の型: 引数名, ...)」と書く。return で呼び出し元に値を返す。

関数 は ○ から始めて宣言する

処理をひとまとまりにして名前を付けたものが関数です。 基本情報の擬似言語では、関数定義の先頭に という記号を置きます。

○整数型: 最大値(整数型: a, 整数型: b)
  if (a > b)
    return a
  endif
  return b

○整数型: の部分が「戻り値の型」、最大値 が関数名、(整数型: a, 整数型: b) が引数リストです。引数もそれぞれに型を書きます。return で呼び出し元に値を返し、そこで関数は終わります。

ブラウザで動かしてみる

最大値を返す関数を 2 回呼び出す例です。一行ずつ実行 を押していくと、関数呼び出しに入った瞬間に 引数 a, b が右側の変数テーブルに現れ、return で呼び出し元に戻ると消えていくのが目で追えます。

待機中
エディタを読み込み中…

変数

まだ実行されていません

出力

まだ出力はありません (print で表示します)

出力は 710 です。 引数の値を変えて再実行すると、同じ関数が違う入力で動く様子を確認できます。

戻り値のない「手続き」は ○名前(...) で書く

値を返さず、何かを実行するだけの処理は「手続き」と呼びます。 手続きの定義では、戻り値の型を書きません。

待機中
エディタを読み込み中…

変数

まだ実行されていません

出力

まだ出力はありません (print で表示します)

挨拶 は戻り値を持たないので、整数型: 結果 ← 挨拶("太郎") のように受け取ることは想定されていません。 「実行するだけ」の処理は手続き、「値を計算して返す」処理は関数、 と切り分けて考えると読み書きが楽になります。

関数の呼び出しは式の中でも使える

戻り値を持つ関数は、式の途中に埋め込んで使えます。

整数型: x ← 最大値(3, 7)              // 変数に代入
整数型: y ← 最大値(3, 7) + 最大値(2, 5) // 式の中で複数回呼ぶ
if (最大値(a, b) > 10)                // 条件式の中で呼ぶ
  print("大きい")
endif

関数呼び出しは 1 つの値のように振る舞うため、 変数を書ける場所ならほぼどこでも使えます。

再帰: 自分自身を呼び出す

関数の中で自分自身を呼び出すことを再帰と呼びます。 階乗 n! = n × (n-1)! のように「自分より 1 つ小さい問題」で表せる処理と相性が良い書き方です。

待機中
エディタを読み込み中…

変数

まだ実行されていません

出力

まだ出力はありません (print で表示します)

出力は 120 (= 5! = 5×4×3×2×1) です。一行ずつ実行 を押していくと、階乗(5) の中で 階乗(4) が呼ばれ、 さらにその中で 階乗(3) が呼ばれ… と、 変数テーブルにいくつもの n が (階乗) というラベル付きで積み上がっていく様子が観察できます。 必ず「これ以上再帰しない終了条件」(ここではn ≦ 1) を書くのが再帰のコツです。

試験でつまずきやすいポイント

  • ○ を書き忘れる: 関数定義の先頭の ○ を忘れると、 その行はただの変数宣言や式として扱われて意味が変わる
  • return 忘れ: 関数で return を書き忘れると呼び出し元が未定義の値を受け取る
  • 引数の型と実引数の型がずれる: 整数型を要求する関数に 文字列を渡すと実行時エラー
  • 再帰の終了条件: 終了条件を書き忘れると無限再帰になる。 「引数がどう変わっていくか」を追って、 必ず基底ケースに到達することを確認する

6 本のレッスンをすべて読み終えたら

変数・条件分岐・while・for・配列・関数と、 基本情報の擬似言語で使う主要な構文を一通り学びました。 次のステップはこの 4 つがおすすめです。

  • 練習問題 を解いて、コードを目で追って出力を言い当てられるか確かめる (ここまで読めていれば解けるはずの基礎 10 問と、本番相当の 10 問がある)
  • 実行シミュレーター に戻り、自分でコードを書いて動かしてみる
  • 多言語横並び比較ツール で、擬似言語と Python / TypeScript を並べて読み比べる
  • 過去問集を 1 冊解いて、実際の科目 B の設問形式に慣れる

よくある疑問

Q.関数と手続きは何が違いますか?
A.戻り値を返すのが関数、返さないのが手続きです。関数は「○戻り値型: 名前(...)」、手続きは「○名前(...)」と書きます。呼び出す側から見ると、関数は式として値を受け取れる、手続きは実行するだけ、という違いになります。
Q.return を書かないとどうなりますか?
A.関数 (戻り値を持つもの) で return を書かずに終わると、呼び出し元は「未定義の値」を受け取ります。手続きの場合は最後まで実行して自然に呼び出し元に戻ります。関数を定義するときは return を書き忘れないよう注意しましょう。
Q.再帰呼び出しは書けますか?
A.書けます。関数の中で自分自身を呼び出すことができ、階乗やフィボナッチのような教科書的な例は問題なく動きます。無限再帰になると 100000 ステップ超で自動停止するため、ブラウザが固まる心配はありません。

理解できたか試す / 自由に動かす

この構文をもっと練習する(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

プログラムの読み方でつまずいたら。

たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講