GeeksforGeeks (日本語)

再帰:
プログラミング用語では、再帰関数は、直接または間接的に自分自身を呼び出すルーチンとして定義することができます。
再帰アルゴリズムを使用すると、特定の問題を非常に簡単に解決できます。 ハノイの塔(TOH)はそのようなプログラミング練習の一つです。 TOHの反復アルゴリズムを書いてみてください。 さらに、すべての再帰プログラムは反復的な方法を使用して記述することができます(Lipschutzのデータ構造を参照)。
数学的に再帰は、いくつかのパズルを簡単に解決するのに役立ちます。,
例えば、ルーチンのインタビューの質問、
N人のパーティーでは、それぞれの人が一度だけお互いの人と彼女/彼の手を振るでしょう。 合計でどのように多くの握手が起こるだろうか?
解決策:
それはさまざまな方法、グラフ、再帰などで解決することができます。 どのように再帰的に解決できるかを見てみましょう。
N人いる。 それぞれの人は一度だけお互いに握手をします。 N番目の人を考えると、(s)彼は(N-1)人と握手する必要があります。 今、問題は(N-1)人の小さなインスタンスに減少しました。 TNを総振り手と仮定すると、再帰的に定式化することができます。,
TN=(N-1)+TN-1
これを再帰的に解くと、n(N-1)/2と評価できる算術級数が得られます。
演習:N人のカップルのパーティーでは、一つの性別(男性または女性のいずれか)だけが一人一人と握手することができます。 どのように多くの握手が起こるだろうか?
通常、再帰的なプログラムは、時間の複雑さが悪い結果になります。 例としてはフィボナッチ級数がある。 再帰を使用してn番目のフィボナッチ数を計算する時間の複雑さは約1.6nであり、同じコンピュータが次のフィボナッチ数に対してほぼ60%多くの時間を要することを意味する。 再帰フィボナッチアルゴリズムは重複する部分問題を持っている。, ありその他の技術などの動的なプログラミングの改善などに重なアルゴリズム
しかし、いくつかのアルゴリズム(例えば、マージソート、クイックソートなど)は、再帰を使用して最適な時間の複雑さをもたらす。
ベースケース:
再帰関数の一つの重要な要件は、終了点またはベースケースです。 毎再帰的プログラムが必要になる場合させることによって機能が終了します。 欠ベースケース結果予期せぬ動が変わってきました。,再帰関数の書き込みのさまざまな方法
関数自体を呼び出す:(直接の方法)
私たちのほとんどは、再帰プログラムを書くの少なくとも二つの異なる方 以下はハノイの塔のコードである。 それは直接呼び出しの例です。

出力:

Move the disk 1 from S to DMove the disk 2 from S to AMove the disk 1 from D to AMove the disk 3 from S to DMove the disk 1 from A to SMove the disk 2 from A to DMove the disk 1 from S to D

TOHの時間の複雑さは、移動数を定式化することによって計算することができます。
最初のN-1ディスクをソースから補助ディスクに、補助ディスクから宛先に移動する必要があります。 ソースからコピー先への最後のディスクのもう一つの移動。, 数学的には再帰的に定義することができます。
MN=2MN-1+1.
上記の再帰的な関係(2n-1)を簡単に解くことができます。
相互関数呼び出しを使用して再帰:(間接的な方法)
間接呼び出し。 が少なくとも践、機能電話機能をinturn話を元機能です。 この場合、両方の関数は基本ケースを持つ必要があります。
防プログラミング:
までを守り符号化技術との再帰のための優雅な機能です。, 通常、再帰プログラミングは、飛行制御、健康監視などの安全上重要なアプリケーションでは許可されていません。 しかし、制御されていない呼び出しを避けるために静的カウント技術を使用することができます(安全上重要なシステムではなく、ソフトリアルタイ

callDepthの深さは、関数スタックフレームサイズと最大スタックサイズに依存します。
関数ポインタを使用して再帰:(間接的な方法)
再帰はまた、関数ポインタで実装することができます。 POSIXシステムにおけるシグナルハンドラの例である。, ハンドラーが呼び出された同じイベントをトリガーすると、関数が再入力されます。

上記の記事を書いてくれたVenkiに感謝します。 書いてくださいコメントの場合、ある設備は、施設内または近辺にまたは共有する情報についてのお話です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です