2012-07-05

http://anond.hatelabo.jp/20120705093826

いや、ごめん。再帰というのは、木構造による再帰、でも、Switchによる再帰でも同じ。そのアルゴリズムで Call命令を使うのか?って事。

あとCでもswitchが嫌で かつ 再帰によるCall命令が許容されるなら、Tree関数ポインタ持たせて、関数ポインタで評価関数呼び出せばいいじゃん。

単純に要素だけ書けば

struct leaf{

  leaf *subleaf[2];

  int (*eval)(leaf *);

};

でよかろ 値を入れるときAddなら eval_add sub なら eval_sub を呼び出せばいい (データ構造と アルゴリズムの分離はCでもできる。)

どっちみち C++でも、子どものevalを親が呼ぶ 時点で call が呼ばれているから、それ再帰

 

というかC++自体が こういう vtableのC実装から 生まれている実装なので C++でできて、Cで実装できないって、テンプレとかそういうのぐらいだから

究極的にはvtalbe実装すればCでもできる。つか、昔のCのコードなんてVtableを第1引数として渡すようなものばっかだろ。

 

何が言いたいかというと、別に データ構造と アルゴリズムの分離は関数ポインタとVtableの実装によりCでもできる。

設計の問題と言語の問題が摩り替わってる。

switchテーブルが巨大化するのも 小さいクラスが無数にあるのも どっちも同じ事だよ。 

Swithならよい Classならよいってことはない。

記事への反応 -
  • プログラミングは好きです。アルゴリズムや数学の勉強も好きなので「アルゴリズムイントロダクション」や「プログラミングコンテストチャレンジブック」なども読みました。 更に昔...

    • 俺はプロコンに参加するの好きだけど、そういう理由で参加したくないというのはときどき見る でも、そういう人、◯◯において自分は誰にも負けないとかいうのがあるのかな、って思...

      • 自己評価は自分でも高いか低いかよく分からない。 問題を他人に押し付けられる感じが嫌なんだよね。 まったりと、自分の好きな課題だけに取り組んでいきたい。そういう風にして生き...

        • いや、再帰は使わんと思うぞ・・・Stack Over Flow対策があるから自前で再帰は展開するぞ。 それに 問題を解くためにバイナリーツリーを使うことはあっても、バイナリーツリーを使う問...

          • いや、再帰は使わんと思うぞ・・・Stack Over Flow対策があるから自前で再帰は展開するぞ。 「Cならswitchテーブルを使った再帰関数で実現する必要がある」に対するレスなんだろうけど、...

            • いや、ごめん。再帰というのは、木構造による再帰、でも、Switchによる再帰でも同じ。そのアルゴリズムで Call命令を使うのか?って事。 あとCでもswitchが嫌で かつ 再帰によるCall命...

        • 自分の好きな課題のほうが、「どうせ追い抜かれるか、上には上がいる」って感じがするけどなあ。まあ人それぞれか。 洗練されたデータ構造が必要な問題は出るよ。大半の人が解けな...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん