基本情報技術者試験 再帰的アルゴリズム その弍

目次

再帰的アルゴリズムとは

再帰的アルゴリズムとは、関数が自分自身を呼び出すことで処理を進めるプログラミング技法です。通常の繰り返し構造(for文やwhile文)と異なり、再帰は「問題をより小さな同型の問題に分割し、最終的に基底条件(出口)に到達することで終了する」という考え方に基づいています。これにより、複雑な処理をシンプルで直感的な形に表現できるのが大きな特徴です。

オルビナ/基本情報技術者専門官

その壱の再帰的アルゴリズムでは、再帰的アルゴリズムの基本について解説しています。理解をさらに深めたい方は、ぜひ下の関連記事も読んでみてくださいね。

基本パターン

階乗計算(factorial)

function factorial(n):
    if n = 0 then return 1   ← 基底条件(出口)
    else return n × factorial(n-1) ← 再帰呼び出し
ここまでは階乗計算のコードを用意しましたこれで階乗計算を実行できます
factorial(4) を呼び出すと次のように処理が進みます
factorial(4) → 4 × factorial(3)
factorial(3) → 3 × factorial(2)
factorial(2) → 2 × factorial(1)
factorial(1) → 1 × factorial(0)
factorial(0) → 1基底条件で終了つまり出口です

実行結果
4! = 4×3×2×1 = 24
オルビナ/基本情報技術者専門官

階乗計算とは、1からその数 n までの連続した整数をすべて掛け合わせた積を求める計算のことです。記号「!」を使って n! と表します。例えば、n=4 を設定して呼び出すと、  
4! = 4 × 3 × 2 × 1 = 24
となります。これが階乗計算です。

フィボナッチ数列

function fibonacci(n):
    if n ≤ 1 then return n        ← 基底条件(出口)
    else return fibonacci(n-1) + fibonacci(n-2) ← 再帰呼び出し
ここまでは階乗計算のコードを用意しましたこれで階乗計算を実行できます
fibonacci(4) を呼び出します
最初は大きいところから始めます
fibonacci(4) = fibonacci(3) + fibonacci(2)
fibonacci(3) = fibonacci(2) + fibonacci(1)
fibonacci(2) = fibonacci(1) + fibonacci(0)
fibonacci(1) = 1, fibonacci(0) = 0 (出口
ここから再帰呼び出しに入ります
最初は小さいところから始めます
F(2) = 1 + 0 = 1
F(3) = F(2) + F(1) = 1 + 1 = 2
F(4) = F(3) + F(2) = 2 + 1 = 3出口

F(4) = F(3) + F(2) = 2 + 1 = 3は最後の結果なので3です

計算結果
fibonacci(4) = 3

配列の合計

function arraySum(A, i):
    if i ≥ length(A) then return 0    ← 基底条件(出口)
    else return A[i] + arraySum(A, i+1)   ← 再帰呼び出し
ここまでは配列の合計のコードを用意しましたこれで配列の合計を実行できます
配列 A = [2, 4, 6] の合計を求めたいときarraySum(A, 0) を呼び出します

arraySum(A,0)
= A[0] + arraySum(A,1)
A[0][2, 4, 6]の内、2を選択してますよって2です足すのはまだです
= 2 + arraySum(A,1)


arraySum(A,1)
= A[1] + arraySum(A,2)
A[1][2, 4, 6]の内、4を選択してますよって4です足すのはまだです
= 4 + arraySum(A,2)


arraySum(A,2)
= A[2] + arraySum(A,3)
A[2][2, 4, 6]の内、6を選択してますよって6です足すのはまだです
= 6 + arraySum(A,3)


arraySum(A,3)
配列外なので0ですここから出口に出ます
= 0i=3length(A)=3 なので出口
ここから再帰呼び出しに入ります
足すのはここからです計算してみましょう
数が大きい順からスタートです
arraySum(A,2) = 6 + 0 = 6
arraySum(A,1) = 4 + 6 = 10
arraySum(A,0) = 2 + 10 = 12出口

実行結果は12です

まとめ
arraySum([2,4,6],0) = 2 + (4 + (6 + 0)) = 12
オルビナ/基本情報技術者専門官

再帰呼び出しは計算のスタート基底条件は計算の終了です。この考え方は試験に出やすいので、しっかり理解しておきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITTIのアバター ITTI 運営長

私はフロントエンドエンジニアを目指す初心者で、ITパスポートを取得済みです。現在はCopilotを活用しながらAIや最新のIT技術を学び、日本の開発現場で求められるチーム開発やセキュリティの知識を吸収しています。学んだことはコードや仕組みを整理し、わかりやすく発信することで、同じ学びの途中にいる人たちの力になりたいと考えています。

コメント

コメントする

目次