5の問題をC言語の再帰関数を使って解決する方法は何でしょうか?

5の問題をC言語の再帰関数を使って解決する方法は何でしょうか?

C プログラミングでは、再帰は問題解決を簡素化し、コードの再利用性を向上させる非常に便利な手法です。この記事では、数値 5 を解くことを例として、C 言語の再帰関数を使用してこのタスクを達成する方法を紹介します。

9. 5の問題をC言語の再帰関数を使って解決する方法は何ですか?

まず、問題を明確に定義しましょう。数字の 5 を解く方法は、加算、減算、乗算、除算、括弧の組み合わせを通じて、与えられた一連の数字の中で数字 5 の式を求めることです。たとえば、数値のセット {1, 2, 3, 4} から、数値 5 は次の式で取得できます: 2 + 3 = 5。

この問題を解決するには、まず、指定された一連の数値とターゲット数値に基づいて条件を満たすすべての式を返す再帰関数を定義する必要があります。

voidsolve(int* nums, int n, int target, char* expr, int sum, int last, int Index) {

if (index == n) { // 再帰的な終了条件

if (合計 == ターゲット) {

printf(\s\

\ expr);

}

戻る;

}

// 加算: 現在の数値を式に加算します。

int len = strlen(expr);

expr[len] = '+';

expr[len + 1] = '0' + nums[インデックス];

expr[len + 2] = '\0';

solve(nums, n, target, expr, sum + nums[インデックス], nums[インデックス], インデックス + 1);

expr[len] = '\0';

// 減算: 式から現在の数値を減算します。

len = strlen(expr);

expr[len] = '-';

expr[len + 1] = '0' + nums[インデックス];

expr[len + 2] = '\0';

solve(nums, n, target, expr, sum - nums[インデックス], -nums[インデックス], インデックス + 1);

expr[len] = '\0';

// 乗算: 現在の数値を式に乗算します。

len = strlen(expr);

expr[len] = '*';

expr[len + 1] = '0' + nums[インデックス];

expr[len + 2] = '\0';

solve(nums, n, target, expr, sum - last + last * nums[インデックス], last * nums[インデックス], インデックス + 1);

expr[len] = '\0';

// 除算: 現在の数値を式に除算します。

len = strlen(expr);

expr[len] = '/';

expr[len + 1] = '0' + nums[インデックス];

expr[len + 2] = '\0';

solve(nums, n, target, expr, sum - last + last / nums[インデックス], last / nums[インデックス], インデックス + 1);

expr[len] = '\0';

// 現在の番号は使用しないでください

solve(nums, n, target, expr, sum - last, last,index + 1);

}

上記は再帰関数の実装です。その入力パラメータには、数値セット nums、セット内の数値の数 n、ターゲット数値 target、現在の式 expr、現在の数値と合計、前の数値 last、および現在の番号のインデックスインデックス。

再帰関数では、最初に再帰終了条件をチェックします。これは、すべての数値が考慮されたときに式の合計がターゲット数値に等しいかどうかです。そうであれば、式を出力します。

次に、加算、減算、乗算、除算の演算子を使用して現在の数値を式に追加し、次のレベルの関数を再帰的に呼び出して式の合計、前の数値、および現在の数値のインデックスを更新します。

最後に、現在の番号が使用されない場合を処理し、関数を再帰的に呼び出して現在の番号のインデックスを更新する必要もあります。

メイン プログラムでは、数値セット {1, 2, 3, 4} を定義し、再帰関数を呼び出して数値 5 を解く問題を解決します。

int main() {

int nums[] = {1, 2, 3, 4};

int n = sizeof(nums) / sizeof(nums[0]);

int ターゲット = 5;

文字式[50];

solve(nums, n, target, expr, 0, 0, 0);

0を返します。

}

上記のプログラムを実行すると、条件を満たすすべての式が得られます。つまり、加算、減算、乗算、除算、括弧の組み合わせにより、数字の 5 の式が得られます。

上記のコードと例を通じて、C 言語の再帰関数を使用して 5 の問題を解決する方法を明確に理解できます。再帰関数は、自分自身を継続的に呼び出して問題の解決策を得ることで、さまざまな状況に対処します。このアプローチにより、問題解決プロセスが簡素化されるだけでなく、コードの再利用性も向上します。他の数値の問題を解決するには、数値セットとターゲット数値を変更するだけです。

要約すると、C 言語の再帰関数の助けを借りて、さまざまな複雑な問題をより便利に解決し、コードの可読性と保守性を向上させることができます。再帰技術を習得することで、C 言語プログラミング開発にさらなる可能性がもたらされます。
コードの一部は https://www.wodianping.com/c/2023-08/254369.html から転送されています。

おすすめ

転載: blog.csdn.net/qq_42151074/article/details/132270751
おすすめ