感想
こんなきれいなものを見つけたので衝動的に書き写した。
フィボナッチ数の計算ロジックの中で描画するのはよくないのは分かるけど、綺麗な処理の組立ってどうしたらいいのかしら。
末尾再帰のコードはここから。
メモ化はScalaらしくないし単純再帰は良くないし末尾再帰は忘れたのでググるのが早かった。
フィボナッチ螺旋は以前ちょっと描いてみようとして投げ出した覚えがあるので、やり方が分かってよかったかな。translateを使うのは間違ってる気がするけど。というか螺旋を描き込んでないけど。
ソースコード
def fib(n: Int) = fib_tr(n, 1, 0, n) def fib_tr(n: Int, b: Int, a: Int, N: Int): Int = n match { case 0 => a case _ => { fill(random(200, 245), 100, 100, 50) println(a+b) rect(0, 0, a+b, a+b) (N - n)%4 match{ case 0 => translate(a+b, 0) case 1 => translate(-b, a+b) case 2 => translate(-(a+b+b), -b) case 3 => translate(0, -(a+b+b)) } fib_tr( n - 1, a + b, b, N ) } } noLoop colorMode(HSB, 360, 100, 100, 100) size(600, 600) def draw() { translate(width/2, height/2) scale(1.0, -1.0) strokeWeight(0) fib(16) }
追記
こっちのほうがProcessing的ではあるけどはるかにシンプルなコードだ。