C#
 Computer >> コンピューター >  >> プログラミング >> C#

再帰を使って階乗を計算するC#プログラムの作成方法

この記事では、C#で再帰(リカーシブ)関数を使用して数値の階乗を計算する方法を解説します。サンプルコードでは、checkFact() という再帰関数を定義し、これを呼び出すことで階乗を求めています。

再帰の基本構造:ベースケース

まず、再帰関数には必ず終了条件(ベースケース)が必要です。引数の値が 1 の場合、1の階乗は1であるため、そのまま 1 を返します。

if (n == 1)
   return 1;

5! を求める場合の処理の流れ

ベースケースに達するまで、関数は自分自身を呼び出し続けます。例として 5!(5の階乗)を計算する場合、再帰呼び出しは次のような流れで進みます。

反復1:
5 * checkFact(5 - 1);

反復2:
4 * checkFact(4 - 1);

反復3:
3 * checkFact(3 - 1);

反復4:
2 * checkFact(2 - 1);

このように、各呼び出しが引数を1ずつ減らしながら自身を呼び出していき、最終的に n == 1 になると、そこから結果が順番に掛け合わされながら呼び出し元へと戻っていきます。

サンプルプログラム

以下は、再帰を使用して階乗を計算する完全なC#のコード例です。実際に動かして挙動を確認してみてください。

Example

using System;

namespace Demo {

   class Factorial {

      public int checkFact(int n) {
         if (n == 1)
            return 1;
         else
            return n * checkFact(n - 1);
      }

      static void Main(string[] args) {

         int value = 9;
         int ret;

         Factorial fact = new Factorial();
         ret = fact.checkFact(value);
         Console.WriteLine("Value is : {0}", ret);
         Console.ReadLine();
      }
   }
}

Output

Value is : 362880

この例では 9 の階乗を計算しているため、9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 362880 という結果が出力されます。再帰を使うことで、ループ処理を書かずに簡潔に階乗を実装できるのがポイントです。

  1. 【C言語】再帰を使って配列が回文かどうかを判定するプログラム

    配列 arr[n](n は配列のサイズ)が与えられたとき、再帰を用いてその配列が回文かどうかを判定するのが本記事のテーマです。回文とは、前から読んでも後ろから読んでも同じになる並びのことで、「MADAM」や「NAMAN」などが代表的な例です。配列が回文かどうかを調べるには、先頭と末尾から順に要素を比較していきます。再帰的なアプローチでも同様に、start と end の値を更新しながら比較を続けます。start と end が交差(すれ違う)すれば回文と判定でき、途中で要素が一致しなかった場合はそこで処理を打ち切り、false を返します。入力例と出力例入力: arr[] = { 2, 3,

  2. C++の再帰を使って木(ツリー)のサイズを計算するプログラムの作成方法

    この問題では、二分木が与えられ、「再帰」を使って木のサイズを計算するプログラムを作成することが課題となります。 ここでいう木のサイズとは、その木に含まれるノードの総数のことです。 具体例を見ながら問題を理解していきましょう。 上の木の場合、サイズは 5 となります。 解法の考え方:再帰によるサイズ計算 木のサイズを求めるには、左部分木のサイズ + 右部分木のサイズ + 1(現在のノード) を計算します。再帰関数は、木の左右それぞれの部分木に対して呼び出され、部分木が存在しない(NULL の)場合は 0 を返します。 上記の例をこの手法で解いてみる ルート(値3)のサイズを求める場合: si