某优快云网友问:
1,1,2,5,8,13.....请问这个数列第30项是什么? 用java实现
玄机逸士的回答:
楼主的题目是不是少了一个数字3?否则没有规律可言,无法得出第30项数据,正确的题目应该是:
1,1,2,3,5,8,13.....请问这个数列第30项是什么? 用java实现
很明显这是一个Fibonacci数列,代码如下:
package com.pnft.fibonacci;
public class Fibonacci
{
static int calculateFibonacci(int n)
{
if(n < 3)
{
return 1;
}
else
{
return calculateFibonacci(n-1) + calculateFibonacci(n-2);
}
}
public static void main(String[] args)
{
System.out.println(calculateFibonacci(30));
}
}
运行程序得到的结果为:
832040
这就是第30项的数据。
Fibonacci数列本质上就是:一个数字等于它前面两项的和,比如2 = 1 + 1; 3 = 1 + 2;5 = 2 + 3;...
关于Fibonacci数列有很多很有意思的事情,其中一个就是当n->无穷大时,F(n-1)/F(n) = 0.618... 黄金分割。
这是可以证明的(此结论网上颇为多见,然鲜有证明者):
假定Fibonacci数列有n项 F(1),F(2),F(3),F(4),F(5),F(6)...,F(n-2),F(n-1),F(n)
根据Fibonacci数列的定义,我们可以知道:
F(n) = F(n-1) + F(n-2) (0)
现在我们来算算F(n) / F(n-1),将(0)式代入:
很显然,当n->无穷大的时候,
(1)
令,那么
那么当n->无穷大的时候,(1)式将变成:
(2)
解(2),得到:
Fibonacci两项相比,不可能出现负数,因此负数解没有意义,舍去之。那么最后得到
,即
得证!