No.1ベストアンサー
- 回答日時:
1)プログラムの簡潔さ:再帰の方が遥かに簡潔でステップ数も少ない。
2)読みやすさ:モノによるでしょう。再帰と同じことはスタックを自分で管理すれば出来ます。これも結構分かり難い。
画像処理で「ラベリング」なんか考えると、再帰の方が遥かに楽で、「ラベリング」の定石通りに組むと結構大変で分かり難い。
3)計算時間:再帰は関数呼び出しのオーバーヘッドがかかります。以前、上の「ラベリング」処理で、
a)定石通り
b)再帰
c)再帰と同じ仕掛けを自分でスタック管理で実現
と3つ比較しましたが、速い順にa)c)b)。しかもb)はスタックオーバーフロー連発でした。b)とc)に差が出たのは、「関数呼び出しのオーバーヘッド」しか考えられません。関数を呼び出すと、レジスタの内容なんか全部スタックに保存しますから...。
No.3
- 回答日時:
No.1の補足です。
ymmasayanさんの言われる、「ハノイの塔」は遊びに属しますし、「バイナリ・ソート」も「qsort」という便利で強力なものがある以上、自力でプログラム書いても勉強にしかなりません。学生さんならこれでいいでしょうが、社会人の場合は「実務に生かしてナンボ」の世界です。ymmasayanさんはあくまで例として出しただけなんでしょうが...。
私自身が実務で使った例を述べます。昔は再帰のできないFortanが主でしたから、Fortranで再帰でなければ書けない場合に限り、スタックを自分で管理して再帰プログラムを書きました。Cが普及してからは、そんな面倒なことしません。
1) 3D地形上にまばらに分布する数1000件の建物を管理する際、「balanced Quad Tree」を使用。このように深さの決らない階層的データ構造は事実上再帰でしか書けない。(Fortran)
2) CADで作られた車の自由曲面データをCAM用に多面体近似する際、トリム曲面を
「Binary Tree」で管理し、指定トレランス以内まで分割。これも再帰でないと無理。(Fortran)
3) 電波伝播解析用に2D,3D-RayTraceをした際、電波が反射・回折・透過などで分岐することを再帰で表現(C)
4) 地下の地層に石油がどのように溜まるかシミュレートする際の連続領域検出用に(C)
5) STL(Stereo Lithography)データをOpen-GLでSmoothShadingする際、近傍頂点グループの分類にBalanced Octreeを使用。数10万Polygonのため、総当たりだと日が暮れる。(C++)
No.2
- 回答日時:
一長一短があると言うことを説明したいので例えを使います。
鶴亀算を解くのに小学生なら鶴亀算の方がよくわかります。
しかし、高校生なら、2元1次方程式の方が理解しやすいでしょう。
再帰も初心者にとっては、はなはだ難しいですし、トリッキーですが、論理的に整然としていますので、ベテランにとっては、プログラムが短くて、わかりやすいでしょう。
計算にかかる手間は、おそらく再帰の方がかかっているのでしょうね。
ただ、注意しないといけないのは、再帰で解かなくても解ける問題を、無理矢理、再帰で解いて見せている例が多いことです。検証がし易いからと言う理由は判るのですが、本当に再帰でないと解くのが難しい問題(ハノイの塔など)をもっとPRすべきなのでしょうね。バイナリーソートなども、再帰を使うととても短いステップで書けますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
- C言語・C++・C# 1. 仮想CPU「exmini」を使用して,「$dataからn減算する」プログラムを作成してください 2 2022/07/04 17:49
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- システム CPUの問題について 2 2022/07/09 12:04
- IT・エンジニアリング 未経験でエンジニアを目指す場合、どのようなルートで目指すべきか? 5 2023/07/23 01:49
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- その他(ビジネス・キャリア) グーグルの障害者訓練プログラム募集あるがどうだろ?6時間勤務で月収22万!! 1 2023/02/17 20:36
- Windows 10 このWindowsUpdateの失敗メッセージは何を物語るか? 5 2023/07/17 11:49
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ステップ数について
-
ステップ数??
-
VB6.0で #の意味
-
ライン数とステップ数の違いに...
-
ubuntuで デイスク/deb/loopと...
-
GCCで関数の引数が渡らない
-
パソコンでインターネット接続...
-
スタック領域変更
-
エクセルのHLOOKUP関数の検索範...
-
パソコン初心者がキーボードを...
-
コンパイラオプション
-
関数呼び出しでのスタック消費量
-
コンパクションとガーベジコレ...
-
AutoCAD LTの中古。
-
スタックフレームの消滅
-
VC++でプログラムから現在のス...
-
関数のプロローグとエピローグ...
-
CASLとCASL2の違いについて
-
クロック周波数の計算問題について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ライン数とステップ数の違いに...
-
ステップ数について
-
STEPについて
-
ドット絵のようなやつを作るに...
-
VB6.0で #の意味
-
Octaveでのオイラー法とルンゲ...
-
ステップ数によるスケジュール
-
「ByRef引数の型が一致しません...
-
ステップカウントツールが作成...
-
prologでNの階乗の逆関数を考...
-
現在時刻の取得
-
シェルスクリプトについて
-
ステップ数??
-
プログラムで 一番大きい を定...
-
三菱シーケンサ FX2Nについて
-
再帰について
-
PythonのプログラムのDirに関す...
-
繰り返しの続き、黄金比
-
ショートカットキーに関して
おすすめ情報