フィボナッチ関数
http://ja.wikipedia.org/wiki/フィボナッチ数
趣旨
- 数式をプログラミングに置き換えて、ロジックをコード化する。
- Unityではどういった使い方をするのがベストか?の検証。
ソースコード
↑に面倒な数式書いてしまったが、
「順番に数字を足して行く」
「足した数字とその前の答えの数字を足して行く」
この2点が重要なポイントかと。
ソースコード
Fibonacci.cs
using UnityEngine;
using System.Collections;
public class Fibonacci : MonoBehaviour {
private int m_count = 0;
private int m_maxCount = 30;
private int[] m_fibonacci = { 0, 0 };
private int m_answer = 0;
void Update () {
if(m_count < m_maxCount) {
if(m_fibonacci[0] == 0 || m_fibonacci[1] == 0) {
m_answer = 1;
Debug.Log("Count:" + m_count + " Is init\n" + "Fibonacci:" + m_answer);
m_fibonacci = new int[]{ m_answer, m_fibonacci[0] };
}
else {
m_answer = m_fibonacci[0] + m_fibonacci[1];
Debug.Log("Count:" + m_count + " Is Cal\n" + "Fibonacci:" + m_answer);
m_fibonacci = new int[] { m_fibonacci[1], m_answer };
}
m_count ++;
}
}
}
計算ルール
- 30回計算する
- カウントの上限以外の値は0
計算式は至って簡単。
null処理を最初に一度入れ、全てUpdateに記載する。
この場合のnullは0とし、配列に何も入っていなければ最初の値として1を代入する。
計算処理の流れとして、
- 計算
- 表示
- 配列処理(中の値を一つずらして、[1]に出した答えを代入する)
と言ったところでしょうか。
そのあとにカウント用のプロパティに1を足してあげます。
例題
兎の問題(wikiより抜粋)
フィボナッチは次の問題を考案した
- 1つがいの兎は、産まれて2か月後から毎月1つがいずつの兎を産む。
- 兎が死ぬことはない。
- この条件のもとで、産まれたばかりの1つがいの兎は1年の間に何つがいの兎になるか?
つがいの数は次の表のようになる。どの月のつがいの合計も、その前の2つの月での合計の和となり、フィボナッチ数が現れていることがわかる。
産まれたばかりのつがい | 生後1か月のつがい | 生後2か月以降のつがい | つがいの数(合計) |
---|---|---|---|
0か月後 | 1 | 0 | 0 |
1か月後 | 0 | 1 | 0 |
2か月後 | 1 | 0 | 1 |
3か月後 | 1 | 1 | 1 |
4か月後 | 2 | 1 | 2 |
5か月後 | 3 | 2 | 3 |
6か月後 | 5 | 3 | 5 |
7か月後 | 8 | 5 | 8 |
8か月後 | 13 | 8 | 13 |
9か月後 | 21 | 13 | 21 |
10か月後 | 34 | 21 | 34 |
11か月後 | 55 | 34 | 55 |
12か月後 | 89 | 55 | 89 |
あとがき
と、こんな感じです。
今年に入って数式の勉強を朝にやっていた結果ですが、
頭の体操としては十分な内容でした。
継続して行けたらと思います。
…これは、ピグミンでも作ればいいのかな??w