Home > Archives > 2007-04

2007-04

フィボナッチ数列

お腹減ったなぁ。

どうも JC の方です。

ActionScript を色々と調べていてこんなのを見つけました。

フィボナッチ数列を求める 関数

function fib(i:Number):Number{
	if (i<2) {
		return 1;
	} else {
		return fib(i-2) + fib(i-1);
	}
}

何か面白そうだったのでループで回してみた。
・・・・・・・・・
・・・・・・
・・・
PC が止まった。10回目くらいまではトレースされたがそれ以降はCPUフル稼働。

そこで考えてみた。
どうやったら早くできるか。
遅い原因は恐らく再起処理(?)を行っているからだと思う。
じゃあ早くするには?
再起じゃなく求めればいい!
って事でできたのがコレ。

var log:Array = new Array();
function fib(i:Number):Number {
	if (i<3) {
		log[i] = 1;
		return 1;
	} else {
		var l:Number = log[i - 1] + log[i - 2];
		log[i] = l;
		return l;
	}
}
var time1 = getTimer();
for (var n:Number = 1; n < 74; n++) trace(n + " : " +fib(n));
trace(getTimer() - time1);

73項までを 5ms で終了。

ActionScript 3.0 に至っては1ms で終了。
早い。

log として 配列に計算した数字を入れて、それから計算すれば
すぐに答えがでる。
log に無い項は後から計算してもすぐ終わるし、
特に再起処理を使って処理を行う必要も無い気がする。

コレを何かに使えないかなぁ?

DateUtil AS 2.0

今回は 久々に ActionScript に関して。

どうも JC の方です。

今更なんですが、ActionScript2.0 で書いた DateUtil.as を公開してみようかと思って。
ちょっと前に Flash でとあるゲームのプロトタイプを作ることになって、
その時に作った DateUtil です。
それをちょっと改造して、使い方のサンプルとコメント書いてみた。
以下からダウンロードしてください。

DownLoad
どんな事感じなのかをまとめておこう。

public static function str2Date(yyyymmdd: String): Date
public static function date2Str(date: Date): String
public static function num2Date(yyyymmddNum: Number): Date
public static function date2Num(date: Date): Number
public static function zeroSuplessStr2(num: Number): String
public static function getFullYear(yyyymmdd: String): Number
public static function getMonth(yyyymmdd: String): Number
public static function getDate(yyyymmdd: String): Number
public static function time2Zero(date: Date): Date
public static function isLeapYear(date: Date): Boolean
public static function min(): Date
public static function max(): Date
public static function shiftMilliseconds(date: Date, milliseconds: Number): Date
public static function shiftSeconds(date: Date, seconds: Number): Date
public static function shiftMinutes(date: Date, minutes: Number): Date
public static function shiftHours(date: Date, hours: Number): Date
public static function shiftDate(date: Date, dates: Number): Date
public static function shiftMonth(date: Date, months: Number): Date
public static function shiftYear(date: Date, years: Number): Date
public static function shiftTime(date: Date, years: Number, months: Number, dates: Number, hours: Number, minutes: Number, seconds: Number, milliseconds: Number): Date
public static function getMonthFirstDate(date: Date): Date
public static function getMonthLastDate(date: Date): Date
public static function getWeekFirstDate(date: Date, startDay: Number): Date
public static function getWeekLastDate(date: Date, startDay: Number): Date
public static function differenceDate(targetDate: Date, diffDate: Date): Number
public static function clone(date: Date): Date




メソッド一覧はこんな感じ。
26メソッドか。
いらなそうなのもあるが、意外と便利だったりするので一応取っておいたのもある。
max(), min() とか結構使える。(と思う)
引数に 複数の Date オブジェクトを渡してやると未来、または過去が帰ってくる。
あとは differnceDate() 、shiftDate() 、getMonthFirstDate() 、getMonthLastDate()、
getWeekFirstDate() 、 getWeekLastDate() も結構お気に入り。(多いな)

differenceDate() は 二つのDate オブジェクトが 何日差かを計算する。
shiftDate() は 日付をずらす。
getMonthFirstDate() と
getMonthLastDate() は、指定日の 月の始まり、または終わりの日を返してくれる。
getWeekFirstDate() と
getWeekLastDate() は、指定日の 週の始まり、または終わりの日を返してくれる。
さらに何曜日始まりかを第二引数に渡すとそれにあった日を返してくれる。

どれも閏年とか気にしなくて使えるから便利だと思う。

ってこんなのを公開してみているのは何故か。
恥ずかしながら、まだ Flash 仲間がいない(´・ω・`)ソーボン
なので、少しでも Flasher の方々に近づければと勉強中だったが、
俺も勉強してるだけでは近づけないと思い、コレを布石に一人でも仲間ができたらなぁ。
とか考えている。
実力の無い人間が実力のある人間に声を聞いてもらうには、
人一倍大きく声を張り上げなければいけないような気がしている。
実力が無くても、向上心のある人間がもっと色んな人と関われる世の中になってほしいなぁ。

話は逸れたが、何かバグとか「ココをこうした方が効率的だ!」とか言うのがある方は連絡ください。
もっと勉強がしたいので「こんなのもあったら便利」っていう意見もたくさん欲しいです。

 m(_ _)m 宜しくお願いします。

Home > Archives > 2007-04

Search
Feeds
Meta

Return to page top