裴波拉契数列 递归求第N的值

 /*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 ,……

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值