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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hanrongle 中级黑马   /  2013-8-7 22:07  /  1663 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

斐波那契数列
  1. import java.util.*;
  2. import java.io.*;

  3. public class Fibonacci
  4. {
  5. public static void main(String[] args) throws IOException
  6. {
  7. Scanner in=new Scanner(System.in);
  8. long num = Fib(in.nextInt());
  9. System.out.println(num);
  10. }

  11. public static long Fib(int n){
  12. if(n<3)
  13. return 1;
  14. else
  15. return Fib(n-1)+Fib(n-2);
  16. }
  17. }
复制代码
上述代码,是关于斐波那契数列计算问题的,如果输入的数较大的话,计算速度会非常慢,像输入60,就会停滞在控制台不懂。该代码如何优化?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

2 个回复

倒序浏览
可惜还在北京传智上基础班,还没有讲到这块的内容,冯佳老师今天上课的时候,也提到了这个问题,但是还没有学习,只能过段时间再提这个了。
回复 使用道具 举报
  1. import java.util.Scanner;


  2. public class test {
  3.         public static void main(String[] args) {
  4.                 int temp = 0;
  5.                 int a = 0, b = 1;
  6.                 Scanner scanner = new Scanner(System.in);
  7.                 int num = scanner.nextInt();
  8.                 if (num == 0) {
  9.                         System.out.println(0);
  10.                 }
  11.                 for (int i = 2; i < num ; i++) {
  12.                         temp = a;
  13.                         a = b;
  14.                         b += temp;
  15.                 }
  16.                 System.out.println(b);
  17.         }
  18. }
复制代码
递归的方法实在太消耗系统资源了。时间开销和空间开销都好大。最好的解决办法是不用递归。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马