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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
パソコンでインターネット接続...
-
ubuntuで デイスク/deb/loopと...
-
Macと iPadの違いについて 今現...
-
ワープロ検定の勉強法について。
-
エクセルのHLOOKUP関数の検索範...
-
ネットワークアイコンが黄色三...
-
タイピング速度を上げる方法に...
-
RS-FF回路について
-
タイピングの癖
-
Excel VBA マクロ処理 リンク先...
-
gccでスタックサイズを変更する...
-
エラー?メッセージ
-
ブラインドタッチ、苦手なんで...
-
printf / sprintf のスタック消...
-
最大スタックサイズを大きくす...
-
ブロック化因数(ブロッキング...
-
タイピングを極めたい
-
VB.netでDLLを読み込んで実行す...
-
タッチタイピング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ステップ数について
-
ステップ数??
-
ライン数とステップ数の違いに...
-
VB6.0で #の意味
-
プログラムで 一番大きい を定...
-
ステップカウントツールが作成...
-
STEPについて
-
シェルスクリプトについて
-
PythonのプログラムのDirに関す...
-
URLの中の「?=○○」の意味は?
-
ステップ数によるスケジュール
-
「ByRef引数の型が一致しません...
-
c言語プログラミングのプログラ...
-
剰余を求めるプログラム
-
再帰について
-
prologでNの階乗の逆関数を考...
-
ドット絵のようなやつを作るに...
-
基本情報技術者の擬似言語プロ...
-
パソコンでインターネット接続...
おすすめ情報