インタビューでは、再帰を使用して問題を解決したり(1
無限精度の整数に追加するなど)、問題が再帰を使用するのに適している場合があります。時には、問題解決のために再帰を頻繁に使用することが原因である可能性があるため、あまり考えずに、再帰を使用して問題を解決します。
しかし、問題を解決するために再帰を使用することが適切であると判断する前の考慮事項は何ですか?
私が持っていたいくつかの考え:
毎回半分にされるデータに対して再帰を使用すると、再帰を使用しても問題ないように思えます。16GBのRAMまたは8TBのハードドライブに収まるデータはすべて、42レベルの深さの再帰で処理できるためです。(したがって、スタックオーバーフローはありません(一部の環境では、スタックの深さは4000レベル、42を超える可能性がありますが、同時に、各コールスタックがより多くのメモリを占有するため、ローカル変数の数にも依存します多数のローカル変数があり、スタックオーバーフローを決定するのはレベルではなくメモリサイズです)。
純粋な再帰を使用してフィボナッチ数を計算する場合、中間結果をキャッシュしない限り、時間の複雑さを本当に心配する必要があります。
そして1
、無限精度の整数に追加するのはどうですか?議論の余地があるかもしれませんが、3000桁または4000桁の数字を扱うので、スタックオーバーフローが発生する可能性がありますか?私はそれを考えていませんでしたが、おそらく答えはノーです、再帰を使用するべきではありませんが、単純なループを使用する必要があります数が素数であるかどうかなど、数のプロパティ。
最終的な質問は、問題を解決するために再帰を使用することを決定する前に考慮すべきことは何ですか?
1
無限精度の整数に追加するのはどうですか?あなたは言うことができます、はい、彼らはより小さい問題に軽減しますが、純粋な再帰はそれに適していません