フィボナッチとは、イタリアの数学者レオナルド・フィボナッチ氏が研究した「フィボナッチ級数」を意味し、リトレースメントとは「引き返す、後戻りする」といった意味。
経済曲線でよく使うらしい。
フィボナッチリトレースメントでは、フィボナッチ比率に基づいた38.2%、61.8%と補足的に50%の水準がよく用いられます。
通常は以下の様な記述らしいが、
public static long Fibo(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
return Fibo(n – 1) + Fibo(n – 2);
}
遅いらしいので
using System;
using System.Collections.Generic;
using System.Linq;
namespace Gushwell.Etude {
class Program {
static void Main(string[] args) {
// f(0)..f(50)までを列挙する
var fibos = Fibonacci.Enumerate()
.Select((Value, Index) => new { Index, Value })
.TakeWhile(x => x.Index <= 50);
foreach (var f in fibos) {
Console.WriteLine($"f({f.Index}) = {f.Value}");
}
}
}
static class Fibonacci {
public static IEnumerable
yield return 0;
yield return 1;
// 無限に求める オーバーフローは無視
long[] array = new long[] { 0, 1 };
while (true) {
var fibo = array[0] + array[1];
array[0] = array[1];
array[1] = fibo;
yield return fibo;
}
}
}
}
無くならないように覚書。