1,1,2,5,8,13.....请问这个数列第30项是什么?
用java实现
用java实现
解决方案 »
- 单点登录cas求助
- spring 和jpa的整合中spring的扫描问题
- jb2006中部署ejb
- 求助,需要myeclipse all in one 的下载地址
- IBM websphere community版如何配置数据库连接池?
- 寻找寒假实习单位
- 关于ejb及其部署等若干问题。
- tomcat上面项目运行正常,weblogic下面出现•There is no Action mapped for namespace [/] and acti
- spring4源码编译错误,提示缺少jar包
- SpringMVC中Controller存取Session错误!求大神指点
- java 执行Oracle多个数据源问题 急 急死人 困扰2天了
- jsp界面上的 标签控件 如何转换成好看外形样式的?
n=(n-1)+(n-2)
对于n的界限的判断什么的自己考虑一下建议楼主自己的动手试试
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数列有很多很有意思的事情,其中一个就是当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),
现在我们来算算F(n)/F(n-1):
F(n)/F(n-1) = [F(n-1) + F(n-2)]/F(n-1) = 1 + F(n-2)/F(n-1),即
F(n)/F(n-1) = 1 + F(n-2)/F(n-1) (1)很显然,当n->无穷大的时候,F(n)/F(n-1) = F(n-1)/F(n-2),不妨令F(n)/F(n-1) = x,那么当n->无穷大的时候,(1)式将变成:
x = 1 + 1/x (2)
解(2),得到:
x1 = [1 + sqrt(5)]/2
x2 = [1 - sqrt(5)]/2
Fibonacci两项相比,不可能出现复数,因此x2没有意义,舍去之。那么最后得到x = [1 + sqrt(5)]/2,即
F(n)/F(n-1) = [1 + sqrt(5)]/2 => F(n-1)/F(n) = 2/[1 + sqrt(5)] = 0.618
得证
(2)n>=3---n=(n-1)+(n-2);
用递归,4楼的方法可基本实现功能吧。