<?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://fenavi.seplus.jp/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://fenavi.seplus.jp</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Wed, 19 Aug 2026 10:08:06 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>
	<item>
		<title>ソートのアルゴリズム｜つまづきやすいポイントと攻略法 徹底解説！</title>
		<link>https://fenavi.seplus.jp/strategy_guide/fe_strategy10/</link>
		
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 10:00:28 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[ソート]]></category>
		<category><![CDATA[再帰呼び出し]]></category>
		<category><![CDATA[勉強方法]]></category>
		<guid isPermaLink="false">/?post_type=strategy_guide&#038;p=8988</guid>

					<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。 今回のテーマはソートのアルゴリズムです。 ソートのアルゴリズムの種類  [&#8230;]</p>
<p>The post <a href="https://fenavi.seplus.jp/strategy_guide/fe_strategy10/">ソートのアルゴリズム｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://fenavi.seplus.jp">基本情報技術者試験 受験ナビ｜科目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>（sort）とは、配列を昇順（小さい順）や降順（大きい順）に整列することです。<br />
基本情報技術者試験の知識と技能の細目を示したシラバスという資料には、ソートのアルゴリズムとして、<strong>選択ソート、バブルソート、マージソート、挿入ソート、シェルソート、クイックソート、ヒープソート</strong>が示されています。</p>
<p>科目Aには、これらのアルゴリズムの名称と処理内容の説明文を対応付ける問題が出ます。<br />
科目Bには、これらのアルゴリズムを擬似言語で示したプログラムを読み取る問題が出ます。<br />
したがって、ソートのアルゴリズムに関する問題を攻略するには、それぞれのアルゴリズムを理解することはもちろんですが、<strong>それぞれのアルゴリズムをプログラムで経験することも必要です。</strong>
</p>
<p>
ソートのアルゴリズムは、それらをプログラムにしたときの仕組みから、以下のように分類できます。<br />
<strong>多重ループ</strong>とは、繰り返し処理の中で別の繰り返し処理を行うことです。<br />
<strong>再帰呼び出し</strong>とは、関数（または手続）の中で同じ関数（または手続）を呼び出すことで繰り返し処理を実現することです。<br />
<strong>シェルソート</strong>は、挿入ソートを改良したアルゴリズムです。
</p>
<div style="background-color: #ededed; padding: 15px; border-radius: 5px; margin: 10px 0;">
<p style="margin: 0 0 10px 0;"><span style="color: #4b0082;"><strong>【多重ループを使うアルゴリズム】</strong></span><br />
  選択ソート、バブルソート、挿入ソート</p>
<p style="margin: 0 0 10px 0;"><span style="color: #4b0082;"><strong>【再帰呼び出しを使うアルゴリズム】</strong></span><br />
  マージソート、クイックソート、ヒープソート</p>
<p style="margin: 0;"><span style="color: #4b0082;"><strong>【他のアルゴリズムを改良したアルゴリズム】</strong></span><br />
  シェルソート（挿入ソートを改良したもの）</p>
</div>
<p>
アルゴリズムを理解するには、手作業でやってみるとよいでしょう。<br />
教材（受験者であれば何らかの教材をお持ちでしょう）でアルゴリズムの説明を読んだら、カードに数字を書いたものを配列の要素に見立てて、手作業でソートしてみるのです。<br />
これで、科目Aの問題が解けるようになります。
</p>
<p>
アルゴリズムを十分に理解できたら、それをプログラムで経験してください。<br />
擬似言語では、プログラムを動作させられないので、JavaやPythonなどのプログラミング言語を使ってください。<br />
インターネットを「Java クイックソート」や「Python クイックソート」のようにプログラミング言語とアルゴリズムの名称をスペースで区切って検索すれば、実際に動作するプログラムを紹介しているページがいくつか見つかりますので、それらを参考にしてプログラムを作って動作を確認してください。<br />
これで、科目Bの問題が解けるようになります。
</p>
<p>
選択ソート、バブルソート、マージソート、挿入ソート、シェルソート、クイックソート、ヒープソートのすべてを理解し、それらをプログラムとして経験するには、かなりの時間がかかるでしょう。<br />
ただし、この経験によって、プログラミングやアルゴリズムの理解が一気に深まり、苦手意識が一気に解消するはずです。<br />
基本情報技術者試験に合格したいなら、がんばって取り組んでください。
</p>
<h2>ソートのアルゴリズムに関する科目Aの問題の例</h2>
<p>
ソートのアルゴリズムをテーマとした科目Aと科目Bの問題を見てみましょう。<br />
手作業でアルゴリズムを理解していれば科目Aの問題は解けますが、プログラムを経験していないと科目Bの問題は解けないことがわかるはずです。<br />
以下は、クイックソートをテーマとした科目Aの問題（出典：H30秋問6）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題1（出典：H30秋問6）</span></h3>
<p>クイックソートの処理方法を説明したものはどれか。</p>
<p>ア　既に整列済みのデータ列の正しい位置に，データを追加する操作を繰り返していく方法である。</p>
<p>イ　データ中の最小値を求め，次にそれを除いた部分の中から最小値を求める。この操作を繰り返していく方法である。</p>
<p>ウ　適当な基準値を選び，それよりも小さな値のグループと大きな値のグループにデータを分割する。同様にして，グループの中で基準値を選び，それぞれのグループを分割する。この操作を繰り返していく方法である。</p>
<p>エ　隣り合ったデータの比較と入替えを繰り返すことによって，小さな値のデータを次第に端の方に移していく方法である。</p>
</div>
<p>
手作業でソートのアルゴリズムを経験していれば、それぞれの選択肢が何というアルゴリズムの説明であるかがわかるでしょう。<br />
「整列済みのデータ列にデータを追加する」ということから、選択肢アは挿入ソートです。<br />
「最小値を求めることを繰り返す」ということから、選択肢イは選択ソートです。<br />
「基準値より小さなグループと大きなグループに分割する」ということから、選択肢ウはクイックソートです。<br />
「隣り合ったデータの比較と入れ替えを繰り返す」ということから、選択肢エはバブルソートです。</p>
<p>したがって、選択肢ウが正解です。
</p>
<h2>ソートのアルゴリズムに関する科目Bの問題の例</h2>
<p>
以下は、クイックソートをテーマとした科目Bの問題（出典：R05公開問3）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題2（出典：R05公開問3）</span></h3>
<p>次の記述中の <span style="display: inline-block; width: 60px; height: 18px; border: 2px solid #000; vertical-align: middle;"></span> に入れる正しい答えを，解答群の中から選べ。ここで，配列の要素番号は1から始まる。</p>
<p style="margin-top: 15px; text-indent: 1em;">
    次の手続 sort は，大域の整数型の配列 data の，引数 first で与えられた要素番号から引数 last で与えられた要素番号までの要素を昇順に整列する。ここで，first ＜ last とする。手続 sort を sort(1, 5) として呼び出すと，/*** α ***/ の行を最初に実行したときの出力は “ <span style="display: inline-block; width: 60px; height: 18px; border: 2px solid #000; vertical-align: middle;"></span> ” となる。
  </p>
<figure style="display: block; width: 100%; max-width: 600px; margin: 0 auto;">
<div class="material-placeholder">
    <img decoding="async" src="/wordpress/wp-content/uploads/2026/08/fb127d914c59745c3dbdfe2bb12b9883.jpg" alt="" style="width: 100%; height: auto; display: block;" />
  </div>
</figure>
<p>解答群</p>
<p>ア 　１ ２ ３ ４ ５<br />
イ 　１ ２ ３ ５ ４<br />
ウ 　２ １ ３ ４ ５<br />
エ 　２ １ ３ ５ ４</p>
</div>
<p>
この問題には、ソートのプログラムであることは示されていますが、何というアルゴリズムであることかは示されていません。<br />
ただし、ソートのアルゴリズムをプログラムで経験していれば、クイックソートだとわかるはずです。<br />
ポイントとなるのは、 pivot という名前の変数を使っていることと、再帰呼び出しを使っていることです。
</p>
<p>
クイックソートでは、配列の中から基準値を選んで、残りの要素を基準値より小さいグループと大きいグループに分割することを繰り返します。<br />
クイックソートのプログラムでは、基準値を格納する変数の名前を pivot とするのが一般的です。<br />
また、分割の繰り返しは、while文やfor文ではなく、再帰呼び出しを使うのが一般的です。<br />
このプログラムには、手続 sort の処理の中で手続 sort を呼び出している部分がありますが、それが再帰呼び出しです。
</p>
<p>
クイックソートだとわかれば、プログラムを隅々まで読み取る必要はありません。<br />
{2, 1, 3, 5, 4}という配列が、1回目の繰り返し処理の後で、どのようにグループ分けされるかを答える問題なので、基準値をどのように決めているのかを読み取れれば、選択肢の中から正解を選べます。
</p>
<p>
「pivot ← data[(first ＋ last)÷2の商]」という処理で基準値を変数pivotに代入しています。<br />
1回目の繰り返し処理では、first＝1、last＝5なので「pivot ← data[(1 ＋ 5)÷2の商]」であり、pivotは3になります。<br />
{2, 1, 3, 5, 4}という配列は、3を基準値にすると、既にグループ分けができています（既に、3の前に3より小さい値があり、3の後に3より大きい値がある状態になっている）。<br />
したがって、1回目の繰り返し処理の後では、{2, 1, 3, 5, 4}は{2, 1, 3, 5, 4}のままであり、選択肢エが正解です。
</p>
<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://fenavi.seplus.jp/strategy_guide/fe_strategy10/">ソートのアルゴリズム｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://fenavi.seplus.jp">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>再帰呼び出し｜つまづきやすいポイントと攻略法 徹底解説！</title>
		<link>https://fenavi.seplus.jp/strategy_guide/fe_strategy09/</link>
		
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
		<pubDate>Tue, 21 Jul 2026 09:30:36 +0000</pubDate>
				<category><![CDATA[再帰呼び出し]]></category>
		<category><![CDATA[勉強方法]]></category>
		<category><![CDATA[科目 A]]></category>
		<category><![CDATA[過去問演習]]></category>
		<guid isPermaLink="false">/?post_type=strategy_guide&#038;p=8927</guid>

					<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。 今回のテーマは再帰呼び出しです。 再帰呼び出しの仕組み 再帰呼び出し（ [&#8230;]</p>
<p>The post <a href="https://fenavi.seplus.jp/strategy_guide/fe_strategy09/">再帰呼び出し｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://fenavi.seplus.jp">基本情報技術者試験 受験ナビ｜科目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 decoding="async" src="/wordpress/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 decoding="async" src="/wordpress/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://fenavi.seplus.jp/strategy_guide/fe_strategy09/">再帰呼び出し｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://fenavi.seplus.jp">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
