関数の中で別の関数を呼ぶとき、処理回数はどう数える?【基本情報 科目B】

IT基礎

はじめに

基本情報技術者試験の科目Bでは、

「この行(α)は全部で何回実行されるか?」

という問題がよく出ます。

特に、

  • 関数の中で
  • 別の関数を呼び出している

場合は、どこから数えればいいのか迷いやすいです。


ハク
ハク

関数の中でまた関数を呼んでると、頭がこんがらがるぅ……

レイ
レイ

大丈夫です。『どの関数が何回呼ばれるか』を順番に追えば解けます。


今回の例題

次のようなプログラムを考えます。


プログラム1:fact関数

整数型: fact(整数型: n)
整数型: i, ret
ret ← 1

for (i を 1 から n まで 1 ずつ増やす)
ret ← ret × i ← α
endfor

return ret

プログラム2:calc関数

整数型: calc(整数型: a, 整数型: b)
整数型: ret

ret ← fact(a) + fact(b)

return ret

問題

calc(4, 2) を呼び出したとき、

α の行は全部で何回実行されるでしょうか?


ステップ1:fact(n) は何回実行される?

fact(n) の中では、

for (i を 1 から n まで)

となっています。

つまり α の行は、

n 回実行される

ということです。

呼び出しαの実行回数
fact(4)4回
fact(2)2回

ステップ2:実際に呼ばれる関数を確認

calc(4, 2) の中身は、

ret ← fact(4) + fact(2)

です。

つまり呼ばれるのは、

  • fact(4)
  • fact(2)

の2つです。


ステップ3:回数を足す

  • fact(4) → 4回
  • fact(2) → 2回

合計:

4 + 2 = 6

正解

6回


呼び出しの流れを図で見る

calc(4, 2)
├─ fact(4) → αを4回実行
└─ fact(2) → αを2回実行

解き方の3ステップ

  1. 対象の関数が1回呼ばれたときの実行回数を確認
  2. 実際に呼ばれる関数をすべて洗い出す
  3. 回数を全部足す

ハク
ハク

まず fact(n) は n 回って覚えればいいんだね!

レイ
レイ

はい。そして、呼ばれた fact の引数をすべて足せば答えになります。

ハク
ハク

なるほど!関数の中身より、呼び出しの流れを追うのが大事なんだ!


練習問題

calc(6, 3) を呼び出したとき、α の行は何回実行されるでしょうか?

プログラム1:fact関数

整数型: fact(整数型: n)
整数型: i, ret
ret ← 1

for (i を 1 から n まで 1 ずつ増やす)
ret ← ret × i ← α
endfor

return ret

プログラム2:calc関数

整数型: calc(整数型: a, 整数型: b)
整数型: ret

ret ← fact(a) + fact(b)

return ret

答え

  • fact(6) → 6回
  • fact(3) → 3回

合計:

6 + 3 = 9

まとめ

  • fact(n) の α は n 回実行される
  • 呼び出される関数をすべて探す
  • 実行回数を足す

この考え方が分かれば、科目Bの「実行回数を数える問題」はかなり解きやすくなります!

コメント

タイトルとURLをコピーしました