C# の再帰関数

WBOY
WBOYオリジナル
2024-09-03 15:14:33514ブラウズ

C# の再帰関数では、再帰は英語と同じ意味を表すことを意味し、正確には繰り返しと呼ばれます。したがって、関数の再帰的な性質は、同じ作業を繰り返し実行することを意味します。そして、はい、プログラムが正しく処理されない場合、プログラムは間違いなく連続ループで実行されます。これらの再帰関数を実行する際には、必ず適切な条件を指定する必要があります。そうしないと、関数が何度もそれ自体を呼び出すことになり、プログラムが継続的に実行されることになります。ここで、C# でこれらの関数を作成する方法を見てみましょう。

C# の再帰関数の構文

ここでの構文は、C# の基本的な関数構文と同じです。ここを見てみましょう。

C# の再帰関数

ここには特別な構文はありませんが、関数が戻り結果を提供する際にそれ自体を呼び出していることがわかります。そして、明らかに、停止しない実行コードは望ましくないため、これらのパラメータ値を再帰関数に渡す際には細心の注意を払う必要があります。

上記の構文では、return ステートメントでのみ関数を呼び出す必要はありません。むしろ、再帰関数の戻り値を変数に代入し、その変数も返すこともできます。

因数分解の実行

ここでは、再帰関数を生成するためのデフォルトの問題ステートメントである因数分解を取り上げます。

コード:

using System;
class First {
static void Main() {
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
}
public static int fact(int num)
{
if(num==0)
{
return 1;
}
return num*fact(num-1);
}
}

段階的なプロセスを見てみましょう。

  1. まず、階乗を計算するメイン関数から入力値を取得する独自のパラメーター化関数を作成しました。
  2. 次に、指定された数値がゼロかどうかを確認する if 条件を作成しました。数値がゼロの場合は、デフォルト値として 1 を返します。
  3. それ以外の場合は、数値から 1 を引いた値をパラメーターとして受け取る関数を使用して、現在の数値を乗算します。
  4. したがって、この乗算は数値 0 に到達するまで繰り返されます。デフォルトでは、ゼロの戻り出力を 1 として記述しているため、最終結果は 1 で乗算されます。

出力:

C# の再帰関数

ここで、コード内で、関数のパラメーターを num マイナス 1 から num に置き換えます。  この場合、関数は何度もそれ自体を呼び出し、プロセスが繰り返されることになります。

コード:

using System;
class First {
static void Main() {
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
}
public static int fact(int num)
{
if(num==0)
{
return 1;
}
return num*fact(num);
}
}

出力:

C# の再帰関数

上記の出力から、関数がそれ自体を繰り返し呼び出しているスタック オーバーフロー例外がはっきりとわかります。最初のプログラムに対して、ハイライト部分のみが変更されます。

同様に、以下のように数値をユーザー入力値として作成できます:

コード:

using System;
class First {
static void Main() {
int result,c;
string a;
Console.Write("Enter value for number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
result = fact(c);
Console.WriteLine("Factorial is : " + result);
}
public static int fact(int num)
{
if(num==0)
{
return 1;
}
return num*fact(num-1);
}
}

出力:

C# の再帰関数

入力としてゼロを与えたらどうなるでしょうか?はい、1 つは返されます。

出力:

C# の再帰関数

では、負の数を与えたらどうなるでしょうか?

出力:

C# の再帰関数

階乗再帰関数が実行のたびにパラメータの値を減少させているため、スタック オーバーフロー例外も発生しました。したがって、負の数値は -6、-7、-8 などに減っていきます。それが、この例外を検討する理由です。

練習として、負の数に対する再帰関数を作成してみてはいかがでしょうか?

ヒント: ゼロ未満の数値の事前条件を取得し、ゼロになるまで再帰関数パラメーターに 1 を追加できます。

C# の再帰関数の例

再帰関数に関して引用できる良い例はほとんどありません:

これらの再帰関数を使用できる場所が他にもいくつかあります。

  • 指定された開始点と終了点からの数値を連続的に出力します。 (下記プログラム)
  • 指定された開始点から数値を加算し、終了点または特定の合計に達したときに停止します。
  • 特定の範囲内の特定の数値で除算した数値を出力します。
  • 文章などを書いた後、任意の数の連続した線や点を印刷したいと考えています。

ご覧のとおり、再帰関数はループの機能に似ていますが、同じ関数を繰り返し呼び出します。

プログラムが入力として与えられた 2 番目の数値を見つけるまで継続的に数値を追加する再帰関数をどのように作成できるかを見てみましょう。

コード:

using System;
class First {
static void Main() {
int result,c,d;
string a,b;
Console.Write("Enter value for 1st number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
Console.Write("Enter value for 2nd number :");
b = Console.ReadLine();
d = Convert.ToInt32(b);
result = add(c,d);
Console.WriteLine("Add is : " + result);
}
public static int add(int num1,int num2)
{
int sum ;
sum=num1;
if (num1 < num2 )
{
num1++;
sum=sum+add(num1,num2);
return sum;
}
return sum;
}
}

ここで私たちがやったことは次のとおりです:

  • ユーザー入力を通じて 2 つの数値 num1 と num2 を取得しました
  • Add 関数は、num1 から始まり num2 になるまで数値を加算します。

たとえば、num1 = 5 および num2 = 8 の場合、得られる出力の合計は 5+6+7+8、つまり 26 になります。

出力:

C# の再帰関数

そして、num1 に num2 より小さい値を与えたらどうなるでしょうか?

出力:

C# の再帰関数

最初に num1 値としていくつかを与え、合計値を num1 値に割り当て、if ステートメントが適用できない場合は合計を返します。

練習として、特定の条件を満たすまで「コーディングが好きです」を出力する再帰関数を作成できますか?

ヒント: 上記のプログラムで実行したのと同じ追加手順に従うことができます。

結論

ここで、再帰関数の実行、これらの関数の呼び出し方法、およびそれらのいくつかの例を取得することに成功しました。また、関数の呼び出しにおける単純な違いによって、プログラムが限界を超えて実行され、例外が発生する可能性があることも学びました。

以上がC# の再帰関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:C# の数学関数次の記事:C# の数学関数