2012-02-01 12 views
3

再帰はいつ、なぜ繰り返されるのですか?再帰はいつ、なぜ反復よりもパフォーマンスが悪いのですか?

私は最近このインタビューのために質問されました。私の答えは、再帰の深さが深いときに再帰が悪くなることでした。 インタビュアーは別の答えを期待しているようでした。誰もそれをも​​っと説明してもらえますか?

+1

おそらく、時期尚早の最適化は時間の無駄であり、明確かつ理解可能なコードを作成し、実際のボトルネックであることが実証されている場合にのみ最適化するという答えを期待していました。いずれにしても、大きな理論的な答えを考え出すことはできますが、最終的にはすべてが現実世界では無関係です。 –

+1

おそらく、彼女は尾の再帰最適化について話をしたかったでしょうか? http://stackoverflow.com/questions/491376/why-doesnt-net-c-optimize-for-tail-call-recursion –

+0

可能な複製:http://stackoverflow.com/questions/72209/recursion-or -iteration –

答えて

4

多くの理由が考えられます。気になるその一部:

  • 再帰的な深さは、スタックの使用を増やす大きい - 反復が行うJUMPコマンドを使用してのに対し、各再帰にはあまり残しスタックによって時間が巻きスタックを巻き戻し費やされ、そしてメモリが消費され、
  • 再帰関数は、再帰が完了するまでメモリ内に保持されなければならない多くの状態(例えばローカル変数)を保持します(反復、一方、各行でローカルをスローします繰り返し)、その後の再帰のたびに利用可能なメモリが少なくなります。
0

再帰の深さは

ではなく、なぜ部分大きいので、あなただけのものをインタビュアーの半分に答えているとき

:あなたが述べたように、あなたは質問の場合は一部に答えていました尋ねた

関連する問題