C#でメソッドを再帰的に呼び出す方法を解説!階乗計算のサンプルコード付き
C#では、メソッドの中で自分自身を呼び出す「再帰呼び出し(リカーシブコール)」を使うことで、繰り返し処理をシンプルに記述できます。この記事では、代表的な例として「階乗(Factorial)」の計算を再帰関数 display() を使って実装する方法を解説します。
再帰呼び出しの基本構造
再帰関数には必ず「終了条件(ベースケース)」が必要です。今回の階乗計算では、引数が 1 の場合に 1 を返すことで再帰を停止させます。これは数学的に「1の階乗は1」という定義に基づいています。
if (n == 1)
return 1;
それ以外の場合は、自分自身を引数を減らしながら呼び出し続けます。これにより、問題が少しずつ小さくなり、最終的に終了条件に到達します。
5! を求める場合の処理の流れ
例えば 5 の階乗(5!)を求めたい場合、再帰関数は以下のように順番に呼び出されていきます。
Iteration1: 5 * display(5 - 1); Iteration2: 4 * display(4 - 1); Iteration3: 3 * display(3 - 1); Iteration4: 2 * display(2 - 1);
各呼び出しが完了すると、結果が逆順に掛け合わされ、最終的に 5 × 4 × 3 × 2 × 1 = 120 という答えが得られます。
C#メソッドを再帰的に呼び出す完全なサンプルコード
using System;
namespace MyApplication {
class Factorial {
public int display(int n) {
if (n == 1)
return 1;
else
return n * display(n - 1);
}
static void Main(string[] args) {
int value = 5;
int ret;
Factorial fact = new Factorial();
ret = fact.display(value);
Console.WriteLine("Value is : {0}", ret);
Console.ReadLine();
}
}
}
実行結果
Value is : 120
再帰を使う際の注意点
再帰呼び出しはコードを簡潔にできる一方で、終了条件を忘れたり間違えたりすると、メソッドが無限に呼び出され続け、StackOverflowException(スタックオーバーフロー例外)が発生する恐れがあります。また、非常に大きな数値を扱う場合は、ループ処理の方がパフォーマンス面で有利になることもあります。用途に応じて使い分けることが大切です。
-
iPhoneを伏せた状態でも「Hey Siri」を呼び出せるようにする設定方法
iPhoneを手に持っていないときでも、Siriの助けが欲しい場面は意外と多いものです。通常であれば「Hey Siri」機能さえ有効にしていれば問題ないのですが、iOSには端末を画面下向きに置くとディスプレイが自動的にオフになる機能があり、その際にSiriまで無効化されてしまうという落とし穴があります。 では、iPhoneのディスプレイが覆われた状態でも、しっかりと声を聞き取ってもらうにはどうすればよいのでしょうか。本記事ではその設定方法を詳しく解説します。 iPhoneで「Hey Siri」を有効にする基本設定 まだiPhoneで「Hey Siri」による音声起動を設定していない方は、まず以
-
WhatsAppでビデオ通話をする方法を徹底解説!音声通話・グループ通話・データ保護まで
WhatsAppのようなオンラインメッセージアプリのおかげで、コロナ禍の世界においても、家族や大切な人、同僚とスムーズにコミュニケーションを取ることができます。 WhatsAppは、テキストメッセージ、ボイスメッセージ、動画ファイル、ドキュメント、GIF、絵文字などを送れる主要なプラットフォームの一つであり、さらに相手と音声通話やビデオ通話をすることも可能です。 しかも、音声通話もビデオ通話も一切無料。必要なのは安定したインターネット接続だけです。ただし、通話を快適に楽しむためには、十分な通信速度があることも確認しておきましょう。このガイドでは、WhatsAppで通話をかける方法をわかりやすく