5

または、マルチコアCPUは反復よりも再帰を速く処理しますか?

それとも、1つの言語がマシン上でどのように実行されるかに依存しますか?cのように、単純な反復を実行する場合と比較して、大きなコストで関数呼び出しを実行します。

ある日、友人の1人に、再帰はプログラムを高速化できる驚くべき魔法ではないと言ったので、この質問がありました。彼は、マルチコアCPUを使用すると、再帰は反復よりも高速になる可能性があると言いました。

編集:

最も再帰的に好まれる状況(データ構造、関数呼び出し)を考慮すると、 再帰をより速くすることさえ可能ですか?

10月12日に編集:

では、マルチコアCPUは今のところどのように機能していますか?最近のソフトウェアはすべてマルチコアCPU用にプログラムされていますか?

4

2 に答える 2

2

この問題を調べるには、実際には 2 つの方法があります。

1.コンパイルされたコードだけを見ると、はい、反復は再帰よりも高速です。これは、再帰では関数呼び出し (=オーバーヘッド) が追加されますが、反復では追加されないためです。ただし、再帰の一般的なタイプは末尾再帰です。再帰呼び出しは関数の最後で行われます。これは常に、コンパイラによる反復に対して最適化されます。したがって、その場合は問題ありません。Ergo: 場合によっては、再帰は遅くなりますが、決して速くはなりません。

2.関数型プログラミングの観点から、ほとんどの場合、再帰関数は副作用なしで記述されます。(再帰関数に副作用があると、正しい結果を生成することが非常に難しくなります。) 関数に副作用がない場合、並列化は簡単です (したがって、マルチコア システムでの実行が容易になります)。これは再帰関数自体の特性ではありませんが、再帰は反復よりも高速であるとあなたの友人が主張する理由かもしれません。

于 2012-09-25T07:05:11.093 に答える
1

再帰はエレガントで数学的に美しいものですが、多くのリソース、特にメモリを消費します。効率的な反復ソリューションがある場合は、それを実行する必要があります。

于 2012-09-25T06:12:04.023 に答える