スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ふと 「再帰関数じゃなくても」 と思った

以前、自己参照型構造体で、XファイルのFrameの階層構造を実現するプログラム
再帰関数(再帰的に呼ぶ関数)で実装したのですが、

ふと、
「別に再帰関数じゃなくても良いのでは?」と思いました。
いや、むしろ再帰関数を使わないほうが良いかもしれない。

以前、パズルゲームの周囲に同じ色がいくつあるか?という処理を再帰関数で
物凄く簡潔に書けたので感動した覚えがあるのですが、

今回のFrame構造を作り出す処理は多少複雑になってしまっていて、
再帰関数を使うメリットが無いような気がしてきたのです。

それとXファイルは、ポリゴン数の増加や、アニメーションをつけるだけで
意味が分からないぐらい膨大なデータ になることが多いんですよ。

例えばDirectXのサンプルとして入っているtiny_4anim.xというXファイルは
約2.5メガバイトあります。

適当にテキストファイルに文字を打ち込んで保存してみたらわかりますが、
普通はメガバイト単位にはならないですよ。
(テキストファイルで、メガバイト行くなんて相当なものです)


というわけで、Frameの階層が深い場合、
再帰関数を使うとスタックオーバーフローが発生するかもしれない訳です。

なので、再帰関数は使わない方向にした方がいいかなと思いました。
ついでに、
分かりやすく階乗を求めるプログラムで説明してみます。
---------------------------------------------------------
int Test(int Num)
{
if(Num > 1)
return(Num * Test(Num - 1));
else
return(1);
}

--------------------------------------------------------
再帰を使った場合はこんな感じになるんですけども、

---------------------------------------------------------
int Test2(int Num)
{
int result = 1;

while(Num > 0){
result *= Num;
--Num;
}
return(result);
}

--------------------------------------------------------
再帰を使わずに、こんな風にした方が良いのではないかと。

要するに、関数を何度も呼び出すのではなく
関数の中に変数を用意しておいて、
その変数で上手くやりくりすればいいんじゃないかな、と思ったわけです。

また手間がかかりますが、修正してみる・・・!

【追記】
完成しました。
(9月26日 14:54)

完成したのはFrameではなく、AnimationSetの方ですが。
(自己参照型構造体を用いて、アニメーションの情報を格納する)

同じようにして、Frameの階層構造の方も修正できそうです。

【参考画像】
Animation.jpg
(それぞれのKeyの値は適当な値を入れてます。
Scale = 0 とかなっているので、恐らく3Dモデルは表示はされないでしょう)
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

No title

Schemeなどに慣れ親しんだ人は再帰表現の方が見やすいかもしれませんね

No title

確かScheme は、とにかく何でも再帰みたいな感じですよね。
Scheme == 再帰 みたいな。

カッコが一杯あって、最初見たとき「なんじゃこりゃー」とか思ったりしました。
ですが、慣れてくると再帰の方が簡潔に、直感的に理解できるようになるとか。

ともかく、再帰を使ったほうが良い場面もありますし、
再帰か、単純なループ処理か、というのは場合に応じて
柔軟に対応した方がいいかもしれませんねv-290
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。