• 締切済み

「再帰」にはプログラマにとってそんな魅力あるもの?

「日経BPパソコンベストムック 矢沢久雄セレクション アルゴリズム&デザインパターン」のP10において >「再帰」にはプログラマを夢中にさせる魅力がある と書かれているんですが、これのどこが、とりこになる程、魅力あるんですか? こんなものに魅力を感じるのはこの本を執筆した著者だけだと思いますが、どうなんでしょうか? プログラマーの方、回答のほうお願いします。

みんなの回答

  • SPROCKETER
  • ベストアンサー率26% (2016/7519)
回答No.6

 たとえば、1+2+3+4+5+6+7+8+9+・・・・と続く計算をおこなう場合を考えてみますよね。  計算結果を順次に残して置いて、計算終了後に、1、3、6、10、15・・・・という具合に画面上に数字を並べて出力するのだとします。これを通常の方法で計算するとすれば、配列を作って置いて、それに数字を順番に入れて行かなければなりませんし、配列の大きさは計算する数字の上限値に合わせて変えなければなりません。  ところが、スタック演算を使うと、非常に簡単な方法で解決します。最初に演算レジスタAXに1を入れますよね。これをPUSH AXしてから、AXをインクリメント(+1)します。次にスタックに入っている値(1)と加算して、再びPUSH AXします。すると、1、3という値がスタックに積みあがりますよね。後は、これを繰り返していくだけで、5000回でも、1万回でも計算が続けられて、配列を作る必要も無いのです。計算が終わったら、スタックの値を順にPOPして画面出力すれば良いだけです。(逆順出力)  同じように非常に複雑な演算でも、同じ方法でスタック演算出来ます。計算だけではなくて、サブルーチンアドレスをスタックに積み上げて置いて、POPしながらサブルーチンコールを繰り返していくリカーシブプログラムも作れます。再起手続きはプログラムを作ってみると面白いですよ。  実際に作ってみないとわからないでしょうが、円周率計算や平方根計算などで小数点以下1万桁とか、そういう計算をおこなうのにも使えます。

  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.5

再帰処理でキレイにプログラムが書けるよう設計できると嬉しいですね。 単に処理を繰り返すのではなく、数学的に処理できてるって事なので再帰パターンにできると何故か嬉しいです。

回答No.4

私は職業プログラマではありませんが,プログラミングはします(いまはボケたのでもうしない)。「いかにもコンピュータ・プログラムらしい技法」だとは思いますが,条件分岐やループにくらべて魅了的かはわかりません。 下手くそのレベルでいえば,バグがあるとリターンせずに永久に自分を呼び出して終わらなくなる(笑)。メモリ・スタックも食いつぶして暴走しかねない,「危険な荒技」として嫌いですね。

  • agehage
  • ベストアンサー率22% (2546/11328)
回答No.3

こういうのを上手に書けるとカッコいいとは思います 保守性との兼ね合いではありますが、この意見には概ね同意です

回答No.2

プログラマーではありませんが、一部のコアな方にはハマるんじゃないですか?

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

一部の機能が「再帰」を使うと簡単に書けるだけです。 でも、プログラムは同じところを通過しますが、 データ的には再帰回数分だけメモリー消費しますので同じです。

関連するQ&A

  • 自己参照構造体にてこれのどこがすばらしいものなの?

    「日経BPパソコンベストムック 矢沢久雄セレクション アルゴリズム&デザインパターン」のP12において >筆者はこれを知ったとき、自己参照構造体を考えた人は頭がいいなぁ、美しいなぁと感動しました。 と書かれており、さらに >短いコードが、ゴールに達した人に授与される金メダルのように見えませんか。 と書かれておりますが、これのどこが素晴らしいものなんですか? こんなものに絶賛するのはこの本を執筆した著者だけだと思いますが、どうなんでしょうか? プログラマーの方、感想及び回答のほうお願いします。

  • 自己参照構造体が美しいと感動するのはなぜ?

    「日経BPパソコンベストムック 矢沢久雄セレクション アルゴリズム&デザインパターン」のP12において >筆者はこれを知ったとき、自己参照構造体を考えた人は頭がいいなぁ、美しいなぁと感動しました。 と書かれており、さらに >短いコードが、ゴールに達した人に授与される金メダルのように見えませんか。 と書かれておりますが、こんな概念が、感動すると思いますか? こんなものに感動するのはこの本を執筆した著者だけだと思いますが、どうなんでしょうか? 自己参照構造体に感動する人なんかいるのでしょうか? プログラマーの方、回答のほうお願いします。

  • 「ポインタ」とはそんなに素晴らしいものなの?

    どこかの書籍に記載されていたのですが、 >「ポインタ」は魅力があるすばらしいものだ。 上記の一文が掲載されていたのですが、こんな難しい概念。どこが素晴らしいものなんですか? こんなものに絶賛するのは本を執筆した著者だけだと思いますが、どうなんでしょうか? プログラマーの方、感想及び回答のほうお願いします。

  • Facebookの入門書で良いのは?

    ついさっき、テレビでFacebookに関するニュースをやっているのを見て、 今更ですけど、ちょっと興味を持ちました。 で、アマゾンで入門書(解説書)を買ってみようと思い、探したのですが、 どれが良いのか、いまいち決められずに迷っています。 アマゾンのブックレビューは、ざあ~っと目を通したのですが・・・。 発行年月が新しい順に5冊ほどピックアップしたので、内容をご存知の方、 または著者や価格から、「これで、いいじゃない?」みたいなご意見を お願いします。 1、これ1冊で完全理解facebook (日経BPパソコンベストムック) [ムック]   980円 井上 真花、 佐藤 新一 著 2、仕事で使える!Facebook超入門 (青春新書インテリジェンス) [新書]   860円 小川浩 著 3、日本人のためのフェイスブック入門 (Forest2545Shinsyo 29) [新書]   945円 松宮義仁 著 4、フェイスブック facebook 完全活用術 世界中で5億人が利用するSNS [大型本]   1,029円 佐々木和宏 著 5、Facebookをビジネスに使う本   1,500円 熊坂仁美 著

  • フリーや雑誌で入手できるlinuxは?

    フリーで入手できるlinuxについて教えてください。 CDの付属している雑誌のようなものでも構いません。 マルチブートはせず、マシン1台をlinux用にするつもりです。 linux導入後、tomcat, java, struts などを利用し、簡単なウェブアプリを作成したいと思っています。 過去質問などから、Puppy Linuxや「今からはじめるLinux (日経BPパソコンベストムック) 」などいくつかの候補や雑誌は見つけたのですが、 そういったもので、上記のようなアプリを作成できるかどうか分からなかったので、質問させていただきました。 勤務先で、ウェブアプリを作ろうという話があり、そのための調査をしなければなりません。 サーバー上のDBの内容を、WEB経由で一覧参照などができるようにするもので、tomcat, java, struts などを利用します。 ASP.NET等他の方法もあるようですが、今回は上記の手法でいくことになりそうです。 当方は開発担当ではなく、実際の開発は業者に依頼しますが、まったく知識がないのも打ち合わせや運用に支障があると思い、学生の頃Javaは少しだけかじったことがありますので、ごくごく簡単なアプリを自分で作成して勉強してみようと思っている次第す。 どうぞよろしくお願いいたします。 <(_ _)>

  • 再帰を非再帰に実装しなおしたいです。

    odd-even merge ソートを、再帰を用いずに実装したいです。 再帰有りの処理は以下のとおりの実装となります。 http://ideone.com/mAYt61 これを再帰無しの処理に実装し直したいのですが、(odd_even_mergesort関数一つにまとめたい) 上手く書けません。良い書き方を教えていただけますでしょうか??

  • 再帰について

    再帰を用いたプログラムと再帰を用いないプログラム では、プログラムの読みやすさや計算にかかる手間は どうちがうんでしょうか?

  • 再帰について

    こんばんは。 今、大学でC言語の勉強しているのですが、昨日再帰についての講義がありました。 講義の中で以下のプログラムを作成したのですが、このプログラムの 実行結果がなぜ以下のようになるか分かりません。 どなたかご教授ください。 結果:9 8 7 6 5 4 3 2 1 0 プログラム: #include<stdio.h> main() { function(0); } function(int i){ if(i<10) { function(i+1); printf("%2d",i); return i; } }

  • 再帰

    iが10以下の時、a ( i+1 ) ;の部分が実行され printf文は飛び越されますよね? iが10になると、if文は実行されませんよね。 実行結果は9876543210となるのですが、解りません。 どう読み込まれるのか解説お願いします。 a ( 0 ) の時、 void a(int i) {   if ( i<10 ){   a ( i+1 );   printf ( "%d",i );   } }

  • 再帰について

    一般的(?)に、フォルダ内にあるファイルをサブフォルダまで含めて表示するとき、再帰という方法を用いると思います。 フォルダのようなツリー構造の場合に、再帰を使わなくても表示できるプログラムは作れるのでしょうか? (BASIC等は再帰が使えないと聞いたのですが・・・) 考え方だけで良いので、アドバイスお願いします。