重複の可能性:
再帰と反復
再帰関数と非再帰関数の違いは何ですか? 正確にはフィボナッチ。
時間と記憶に関係する答えを探しています。
「再帰的」とは、単に関数が自分自身を呼び出すことを意味します。これは意図的である場合とそうでない場合があります (意図しない再帰は、多くのクラッシュの原因となります)。
関数が操作の一部を実行し、それ自体を呼び出して残りの部分を実行する意図的な再帰は、多くの場合、有用なプログラミング パラダイムですが、「理解する」にはある程度の理解/経験/スキルが必要です。
基本的に、再帰は「繰り返し」(ループ) を置き換えたり、付随する配列割り当て (関数本体にローカルな変数) を置き換えるために使用できます。しかし、すべての反復関数または配列を使用する関数が、その再帰的等価物に効果的に変換できるわけではありません。
問題が再帰に適している場合、多くの場合、実行効率が非再帰バージョンとほぼ同等の再帰バージョンを作成できます...呼び出しメカニズムがループや配列のインデックス作成と比較してどれだけ効率的であるかに応じて、わずかに良くも悪くもなります。言語/コンパイラで。ストレージに関しては、再帰がより効率的であることはめったにありませんが、目前の特定の問題に対して事前に割り当てる (および割り当てのサイズを事前に知る) 必要がないという利点があります。
ほとんどの場合、再帰の方が優れています (実際にそうである場合)。これにより、実装がはるかに単純になり、エラーが発生しにくくなり、エラーがコンピューティングの最大のコストになるためです。(しかし、もちろん、不適切に行うと、多大な時間もかかる可能性があります。)
再帰が良いときはとても良いです。再帰が悪いときは非常に悪いです。
再帰関数は、プログラミング言語で実装されたプロシージャまたはサブルーチンであり、その実装はそれ自体を参照します。
非再帰関数は、プログラミング言語で実装されたプロシージャまたはサブルーチンであり、その実装はそれ自体を参照しません
以下は、再帰的および非再帰的なフィボナッチ数列のリンクです:-再帰的および非再帰的なフィボナッチ数列