<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>再帰呼び出し | 基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</title>
	<atom:link href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/tag/%E5%86%8D%E5%B8%B0%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Tue, 21 Jul 2026 09:45:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.29</generator>
	<item>
		<title>再帰呼び出し｜つまづきやすいポイントと攻略法 徹底解説！</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/strategy_guide/fe_strategy09/</link>
		<pubDate>Tue, 21 Jul 2026 09:30:36 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[再帰呼び出し]]></category>
		<category><![CDATA[勉強方法]]></category>
		<category><![CDATA[科目 A]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=strategy_guide&#038;p=8927</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。 今回のテーマは再帰呼び出しです。 再帰呼び出しの仕組み 再帰呼び出し（ [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/strategy_guide/fe_strategy09/">再帰呼び出し｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。</p>
<p>毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。</p>
<p>今回のテーマは<span style="color: #4b0082;"><strong>再帰呼び出し</strong></span>です。</p>
<h2>再帰呼び出しの仕組み</h2>
<p>
<strong>再帰呼び出し</strong>（recursive call）は、関数の処理の中で同じ関数を呼び出すことで繰り返しを実現するプログラミング技法です。<br />
プログラミングでは、while文やfor文などの構文を使って繰り返しを実現しますが、それとは別に、再帰呼び出しという技法もあるのです。
</p>
<p>
再帰呼び出しで繰り返しを実現できるのは、不思議なことではありません。関数を呼び出すと、関数の先頭から処理が行われます。<br />
したがって、関数の処理の中で同じ関数を呼び出せば、関数の先頭に戻って処理が繰り返されるのです。
</p>
<p>
再帰呼び出しの仕組みを説明する定番の例として、引数nの階乗を求める<strong>fact関数</strong>があります（factは、factorial＝「階乗」という意味です）。<br />
階乗とは、ある数から1までのすべての整数を掛けた値です。<br />
たとえば、5の階乗は、5×4×3×2×1＝120です。<br />
リスト1に、擬似言語で記述したfact関数の例を示します。<br />
ここで注目してほしいのは、n × fact(n － 1)の部分です。fact関数の中で、fact関数を呼び出しています。これが、再帰呼び出しです。
</p>
<div style="background-color: #ededed; padding: 15px; border-radius: 5px; margin: 10px 0;">
  <span style="color: #4b0082;"><strong>リスト1 擬似言語で記述したfact関数の例</strong></span></p>
<pre style="font-family: inherit; margin: 10px 0 0 0; white-space: pre-wrap;">
○整数型：fact(整数型：n)
  if (n ＝ 0)
     return 1
  else
     return n × fact(n － 1)
  endif</pre>
</div>
<p>
fact関数の処理内容は、if文を使った分岐になっています。<br />
数学の約束で、0の階乗は1なので、n ＝ 0という条件が成り立てば、return 1で1を返しています。<br />
そうでない場合は、return n × fact(n － 1)という処理を行っています。<br />
これは、たとえば5の階乗は「5×(4の階乗)」で求められるので、nの階乗は「n×(n－1の階乗)」で求められる、という考えをプログラムで表したものです。
</p>
<h2>再帰呼び出しの処理の流れ</h2>
<p>
再帰呼び出しに関する問題を攻略するには、再帰呼び出しの仕組みを理解しておくのはもちろんですが、再帰呼び出しの処理の流れをトレースできるようにしておく必要もあります。そういう問題も出るからです。<br />
先ほどリスト1に示したfact関数を引数5で呼び出したときの処理の流れをトレースしてみましょう。以下の（1）～（12）になります。
</p>
<div style="background-color: #ededed; padding: 15px; border-radius: 5px; margin: 10px 0;">
<span style="color: #4b0082;"><strong>▼fact関数を引数5で呼び出したときの処理の流れ</strong></span><br />
（1）　fact(5)が呼び出される。<br />
（2）　fact(5)でreturn 5 × fact(4)という処理が行われ、fact(4)が呼び出される。<br />
（3）　fact(4)でreturn 4 × fact(3)という処理が行われ、fact(3)が呼び出される。<br />
（4）　fact(3)でreturn 3 × fact(2)という処理が行われ、fact(2)が呼び出される。<br />
（5）　fact(2)でreturn 2 × fact(1)という処理が行われ、fact(1)が呼び出される。<br />
（6）　fact(1)でreturn 1 × fact(0)という処理が行われ、fact(0)が呼び出される。<br />
（7）　fact(0)でreturn 1という処理が行われ、fact(0)が1を返す。<br />
（8）　fact(1)のreturn 1 × fact(0)がreturn 1 × 1になり、fact(1)が1を返す。<br />
（9）　fact(2)のreturn 2 × fact(1)がreturn 2 × 1になり、fact(2)が2を返す。<br />
（10）　fact(3)ののreturn 3 × fact(2)がreturn 3 × 2になり、fact(3)が6を返す。<br />
（11）　fact(4)のreturn 4 × fact(3)がreturn 4 × 6になり、fact(4)が24を返す。<br />
（12）　fact(5)のreturn 5 × fact(4)がreturn 5 × 24になり、fact(5)が120を返す。
</p>
</div>
<p>
fact(5)→fact(4)→fact(3)→fact(2)→fact(1)→fact(0)という順に関数が呼び出されます。<br />
この時点では、まだどの関数も戻り値を返していません。<br />
fact(0)が1という戻り値を返すと、そこからfact(1)が1を返す→fact(2)が2を返す→fact(3)が6を返す→fact(4)が24を返す→fact(5)が120を返す、という順に戻り値が返されます。これが、再帰呼び出しの処理の流れです。
</p>
<h2>再帰呼び出しに関する問題（1）</h2>
<p>
再帰呼び出しに関する問題を見てみましょう。<br />
短い問題が多いので、一気に4問を紹介します。</p>
<p>1問目は、階乗を求める関数の穴埋め問題（出典：H28春問07）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題1（出典：H28春問07）</span></h3>
<p><i>n</i> の階乗を再帰的に計算する関数  <i>F</i>(<i>n</i>)  の定義において、<i>a</i> に入れるべき式はどれか。ここで、<i>n</i> は非負の整数とする。</p>
<p>
  <i>n</i> &gt; 0 のとき、 <i>F</i>(<i>n</i>) = <span style="border: 2px solid #000; padding: 2px 25px; display: inline-block; margin: 0 5px; vertical-align: middle;">a</span>
</p>
<p>　<i>n</i> = 0 のとき、 <i>F</i>(<i>n</i>)  = 1</p>
<p>ア　 <i>n</i>  +  <i>F</i>(<i>n</i>-1)<br />
イ　 <i>n</i>  &#8211; 1 +  <i>F</i>(<i>n</i>)<br />
ウ 　<i>n</i>  ×  <i>F</i>(<i>n</i>-1)<br />
エ 　(<i>n</i>  &#8211; 1) ×  <i>F</i>(<i>n</i>)
</div>
<p><p>
関数F(n)の機能は、先ほどリスト1で示した関数fact(n)と同様なので、すぐにわかるでしょう。<br />
n ＞ 0のときは、n × F(n － 1)という再帰呼び出しを行います。<br />
したがって、選択肢ウが正解です。
</p>
<h2>再帰呼び出しに関する問題（2）</h2>
<p>
2問目は、階乗を求める関数の乗算回数の問題（出典：H24秋問07）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題2（出典：H24秋問07）</span></h3>
<p><i>n</i> ! の値を，次の関数<i>F</i>(<i>n</i>)によって計算する。乗算の回数を表す式はどれか。</p>
<figure style="display: block; width: 100%; max-width: 300px; margin: 0 auto;">
<div class="material-placeholder">
    <img src="/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2026/07/cb9c6fdc2ce9cb8cf6d37f5aee47f25d.jpg" alt="" style="width: 100%; height: auto; display: block;" />
  </div>
</figure>
<p>
　ア　 <i>n</i> &#8211; 1　　　　イ 　<i>n</i>　　　　ウ 　<i>n</i><sup>2</sup>　　　　エ　 <i>n</i> !
</p>
</div>
<p>
この問題の関数F(n)の機能も、先ほどリスト1で示した関数fact(n)と同様です。<br />
乗算の回数は、たとえば5の階乗なら5×4×3×2×1の4回なので、nの階乗ならn － 1回だと思うかもしれませんが、正解は選択肢イのn回です。<br />
なぜなら、1の階乗を求めるときに、1×(0の階乗)という再帰呼び出しが行われるからです。<br />
5の階乗を5×4×3×2×1×1という5回の乗算で求めることになるので、nの階乗ならn回の乗算になります。
</p>
<h2>再帰呼び出しに関する問題（3）</h2>
<p>
3問目は、掛け算ではなく足し算を使った関数の問題（出典：R01秋問11）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題3（出典：R01秋問11）</span></h3>
<p>自然数 <i style="font-family: 'Times New Roman', serif;">n</i> に対して，次のとおり再帰的に定義される関数 <i style="font-family: 'Times New Roman', serif;">f</i>(<i style="font-family: 'Times New Roman', serif;">n</i>) を考える。<i style="font-family: 'Times New Roman', serif;">f</i>(5) の値はどれか。</p>
<p style="margin: 20px 0; padding-left: 40px; font-family: 'Times New Roman', serif; font-size: 18px;">
  <i>f</i>(<i>n</i>) :   <i style="font-style: normal;">if</i> 　<i>n</i> ≦ 1   <i style="font-style: normal;">then</i>  　 <i style="font-style: normal;">return</i> 1 　  <i style="font-style: normal;">else</i> 　  <i style="font-style: normal;">return</i> <i>n</i> + <i>f</i>(<i>n</i>-1)
</p>
<p>ア 6          イ 9          ウ 15          エ 25</p>
</div>
<p>
関数f(n)の処理内容は、もしもn ≦ 1なら1を返し、そうでないなら再帰呼び出しでn ＋ f(n － 1)を返す、というものです。<br />
f(5)の処理の流れをトレースすると、以下の（1）～（10）になります。f(5)は15を返すので、選択肢ウが正解です。
</p>
<div style="background-color: #ededed; padding: 15px; border-radius: 5px; margin: 10px 0;">
<span style="color: #4b0082;"><strong>▼f(5)の処理の流れ</strong></span><br />
（1）　f(5)が呼び出される。<br />
（2）　f(5)でreturn 5 ＋ f(4)という処理が行われ、f(4)が呼び出される。<br />
（3）　f(4)でreturn 4 ＋ f(3)という処理が行われ、f(3)が呼び出される。<br />
（4）　f(3)でreturn 3 ＋ f(2)という処理が行われ、f(2)が呼び出される。<br />
（5）　f(2)でreturn 2 ＋ f(1)という処理が行われ、f(1)が呼び出される。<br />
（6）　f(1)でreturn 1という処理が行われ、f(1)が1を返す。<br />
（7）　f(2)のreturn 2 ＋ f(1)がreturn 2 ＋ 1になり、f(2)が3を返す。<br />
（8）　f(3)のreturn 3 ＋ f(2)がreturn 3 ＋ 3になり、fact(3)が6を返す。<br />
（9）　f(4)のreturn 4 ＋ f(3)がreturn 4 ＋ 6になり、fact(4)が10を返す。<br />
（10）　f(5)のreturn 5 ＋ f(4)がreturn 5 ＋ 10になり、fact(5)が15を返す。
</p>
</div>
<h2>再帰呼び出しに関する問題（4）</h2>
<p>
4問目は、掛け算ではなくmod演算を使った関数の問題（出典：H28秋問07）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題4（出典：H28秋問07）</span></h3>
<p>
    整数 <i style="font-family: 'Times New Roman', serif;">x</i>, <i style="font-family: 'Times New Roman', serif;">y</i> (<i style="font-family: 'Times New Roman', serif;">x</i> &gt; <i style="font-family: 'Times New Roman', serif;">y</i> ≧ 0) に対して，次のように定義された関数 <i style="font-family: 'Times New Roman', serif;">F</i>(<i style="font-family: 'Times New Roman', serif;">x</i>, <i style="font-family: 'Times New Roman', serif;">y</i>) がある。<br />
    <i style="font-family: 'Times New Roman', serif;">F</i>(231, 15) の値は幾らか。ここで，<i style="font-family: 'Times New Roman', serif;">x</i> mod <i style="font-family: 'Times New Roman', serif;">y</i> は <i style="font-family: 'Times New Roman', serif;">x</i> を <i style="font-family: 'Times New Roman', serif;">y</i> で割った余りである。
  </p>
<figure style="display: block; width: 100%; max-width: 300px; margin: 20px auto;">
<div class="material-placeholder">
      <img src="/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2026/07/b2ac61fc3dc5355470c0148b9aaf29fb.jpg" alt="F(x,y)の定義式" style="width: 100%; height: auto; display: block;" />
    </div>
</figure>
<p>  <!-- 選択肢 --></p>
<p>
     ア  2　　    イ  3 　　    ウ  5　　     エ  7
  </p>
</div>
<p>
関数F(x, y)の処理内容は、もしもy ＝ 0ならxを返し、y ＞ 0ならF(y, x mod y)を再帰呼び出しする、というものです。<br />
F(231, 15)の処理の流れをトレースすると、以下の（1）～（5）になります。F(231, 15)は3を返すので、選択肢イが正解です。
</p>
<div style="background-color: #ededed; padding: 15px; border-radius: 5px; margin: 10px 0;">
<span style="color: #4b0082;"><strong>▼F(231, 15)の処理の流れ</strong></span><br />
（1）　F(231, 15)が呼び出される。<br />
（2）　yの15 ＞ 0なので、F(15, 231 mod 15)が呼び出される。これは、F(15, 6)である。<br />
（3）　yの6 ＞ 0なので、F(6, 15 Mod 6)が呼び出される。これは、F(6, 3)である。<br />
（4）　yの3 ＞ 0なので、F(3, 6 mod 3)が呼び出される。これは、F(3, 0)である。<br />
（5）　yの0 ＝ 0なので、xの3が返される。
</div>
<hr class="mag_tp50 mag_bt50" />
<p>
今回は、「再帰呼び出し」のポイントと攻略法を解説しました。<br />
このテーマが苦手だった受験者の参考になれば幸いです。</p>
<p>それでは、またお会いしましょう！
</p>
<style>
h4 {
  font-size: 1.1rem;
}
h3 + h4 {
  margin: 1em 0 1em;
}
div.card-panel {
  padding: 3rem;
}
@media screen and (orientation: portrait){
div.card-panel {
  padding: 2rem;
}
}
div.card-panel > h3 {
  font-size: 1.2em;
  padding-left: 1em;
  border-left: 5px solid #3f51b5;
}
div.card-panel > h3:first-of-type {
  margin-top: 0;
}
div.card-panel .chip {
    background-color: #3f51b5;
}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/strategy_guide/fe_strategy09/">再帰呼び出し｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
