/*RecursionArray.java
*裴波拉契数列,如下代码是用递归的方式运算,当N大于50时,速度就很慢了,测试时当N为100
*时,要好几分钟,double类型的取值范围为-1.7E308——1.7E308,且N的值过大为溢出,怎么解决?
*2009-11-3
*/
import java.util.*;
public class RecursionArray
{
public static void main(String[] args){
double b=getResult(getBase());
System.out.println("第N项的值为"+b);
}
/*裴波拉契数列
*@return double
*/
public static double getResult(int n){
if (n==0||n==1)
{
return 1;
}
else
return getResult(n-1)+getResult(n-2);
}
/*获取数N
*@return int
*/
public static int getBase(){
Scanner input=new Scanner(System.in);
System.out.println("请输入你要求的第N项数,:");
System.out.println("提示:当你输入的数大于50或小于-50时,建意你先泡一杯咖啡,当然茶也可以");
int n=input.nextInt();
return n;
}
}
引用:
裴波那契数列
13 世纪初,欧洲最好的数学家是斐波拉契,他写了一本叫做《算盘书》的著作,是当时欧洲最好的数学书。书中有着许多有趣的数学题,其中有这样的一题:
如果一对兔子每月能生一对小兔子,而每对小兔在它出生后的第 3 个月里,又能开始生一对小兔子,假定在不发生死亡的情况下,由一对初生的兔子开始,一年后能繁殖成多少对兔子?
推算一下兔子的对数是很有意思的。为了叙述得有条理,我们假设最初的一对兔子出生在头一年的 12 月份。显然, 1 月份只有一对兔子,到 2 月份时,这对兔子生了 1 对小兔子,总共 2 对兔子;在 3 月份里,这对兔子又生了一对小兔,总共 3 对兔子;到 4 月份, 2 月份生的兔子开始生小兔了,这个月生了 2 对小兔,所以总共 5 对兔子;在 5 月份里,不仅最初的那对兔子和 2 月份出生的兔子各生了一对小兔, 2 月份出生的兔子也生了 1 对小兔,总共出生了 3 对兔子,所以总共 8 对兔子……。
照这样推算下去,当然能得到题目的答案,不过,斐波拉契对这种算法很不满意,他觉得这种方法太繁琐了而且推算到最后情况复杂,稍有不慎就会出现差错。于是他又深入探索了题目中的数量关系,终于找到了一种简捷的解题方法。
斐波拉契把推算得到的头几个数摆成一串。
1 , 1 , 2 , 3 , 5 , 8 ,……