A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 知识改变人生 中级黑马   /  2015-4-10 23:01  /  559 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,2 ,3,5,8,13,21....
第100个数是多少

8 个回复

正序浏览
建议使用迭代而不是递归,递归的速度随着调用次数成指数反比,下面是我写的,用迭代方式实现:
  1. public class Test3 {

  2.         public static void main(String[] args) {

  3.                 // 获取斐波那契数列第十项
  4.                 int n = 10;
  5.                 // 获取并输出值
  6.                 System.out.println("斐波那契数列第" + n + "项为: " + fibo(n));
  7.         }

  8.         public static int fibo(int n) {

  9.                 // 定义临时变量
  10.                 int temp1 = 1;
  11.                 int temp2 = 1;
  12.                 int temp3 = 1;
  13.                 if (n < 1) {
  14.                         System.out.println("输入值小于1");
  15.                         return -1;
  16.                 } else if (n > 2) {
  17.                         int i = 2;
  18.                         while (i < n) {
  19.                                 //迭代存储当前值 和前两项值
  20.                                 temp3 = temp1 + temp2;
  21.                                 temp1 = temp2;
  22.                                 temp2 = temp3;
  23.                                 i++;
  24.                         }
  25.                 }
  26.                 return temp3;
  27.         }
  28. }
复制代码
回复 使用道具 举报
thoris 中级黑马 2015-4-11 00:07:01
8#
a[100]=5.731478440138172E20
设置的是double数列, 因为楼主的a1是1,a2是2,所以第100应该是这个。
回复 使用道具 举报
thoris 中级黑马 2015-4-11 00:02:11
7#
想不到那么大  一下子就溢出了。。。
回复 使用道具 举报
楼上的方法 递归很简洁

但是效率不高,可以添加变量展开为一次for;
回复 使用道具 举报
斐波那契  。。。。推荐使用BigInteger,不然很快会爆
回复 使用道具 举报
由这几个数字,发现规律,从第三项起,每一项是前两项的和。所以,可以考虑使用递归的思想来做。
  1. class NumberTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //这个数会越来越大,所以定义为long类型,
  6.                 //还是很有可能超出范围。
  7.                 long result = show(40);
  8.                 System.out.println(result);
  9.         }
  10.        
  11.         //从第三项开始,每一项,都是前两项的和
  12.         private static long show(long n)
  13.         {
  14.                 if(n == 1)
  15.                         return 1;
  16.                 else if(n == 2)
  17.                         return 2;
  18.                 else
  19.                         return show(n-1) + show(n-2);
  20.         }
  21. }
复制代码
回复 使用道具 举报
这是代码,你看对不对啊  public class test2 {         public static void main(String[] args) {                 long [] i=new long[100];                 i[0]=1;                 i[1]=2;                 for(int j=2;j<100;j++)                 {                         i[j]=i[j-1]+i[j-2];                 }                 System.out.println(i[99]);         }  }
回复 使用道具 举报
1298777728820984005
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马