[解決済み] 再帰とループの比較
2022-03-08 05:49:41
質問
再帰とループの両方が自然に解決できるような問題に直面しています。このような場合、規約や好ましい方法などはあるのでしょうか?(もちろん、以下のような単純なものではありません。)
再帰
Item Search(string desired, Scope scope) {
foreach(Item item in scope.items)
if(item.name == desired)
return item;
return scope.Parent ? Search(desired, scope.Parent) : null;
}
ループ
Item Search(string desired, Scope scope) {
for(Scope cur = scope; cur != null; cur = cur.Parent)
foreach(Item item in cur.items)
if(item.name == desired)
return item;
return null;
}
解決方法は?
私は次のような場合、再帰的な解決策を好みます。
-
再帰の実装が反復の解決策よりもはるかに単純である。通常、反復のアプローチでは不可能な方法で問題の構造的側面を利用するためである。
-
再帰の深さがスタックオーバーフローを引き起こさないことは、この方法で再帰を実装している言語について話していると仮定すれば、合理的に保証されます。
条件1は、ここでは当てはまらないようです。反復解法も同じ程度の複雑さなので、私なら反復解法のほうに軍配を上げます。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】再帰使用時のOcamlエラーUnbound Value
-
[解決済み】MIPSアセンブリを使用した再帰的な関数
-
[解決済み] リストを反転させるにはどうしたらいいですか?
-
[解決済み] 再帰的な関数をフローチャートで表現するには?
-
[解決済み] 最後の関数の再帰呼び出しで「scheme application not a procedure」と表示された
-
[解決済み] Fatal error.の解決方法 PHPの「Fatal error: Maximum function nesting level of '100' reached, aborting!
-
[解決済み] Schemeにおける再帰的関数
-
[解決済み] Lispで再帰関数はどのように動作するのですか?
-
[解決済み] foldrとfoldl(またはfoldl')の意味するところ
-
[解決済み] 再帰性はそれ自体が特徴なのか?