如何在斐波纳契数列中找到整数的位置

时间:2014-04-15 02:46:25

标签: java sorting math ranking fibonacci

我试图使用斐波纳契的序列作为游戏体验转换水平转换的限制(我也想批评这个决定),如下所示:

如果一名球员有49.450分,那他就是25级,因为最接近的较小的斐波纳契数是46.368。

但是,我很难弄清楚如何做到这一点。除了创建一个水平作为键和限制值的地图之外,还有更聪明的方法吗?

1 个答案:

答案 0 :(得分:3)

Fibonacci以指数方式增长。基数是phi(黄金比例),所以它不如2 ^ n快,但它仍然很快。只有最小的94个Fibonacci数字可以用无符号的64位整数表示,所以查找表可能是你最好的选择。

但是,如果你确实想要计算它,你可以将封闭的表格解决方案反转为:

int fibIndex(long n) {
    return Math.round(Math.log(n * Math.sqrt(5))/Math.log(PHI));
}

这可能是一个,当然不能在序列的早期区分双1。