java面試題:遞歸方法

          Posted on 2010-05-22 13:40 java小爬蟲 閱讀(3367) 評論(2)  編輯  收藏
          今天參加了一場java筆試,考了斐波那契數列。以前也見過考階乘的。今天順手把它寫下來。

          public class Recursion {

           public static long factorial(int i) {
            if (i < 0)
             return -1;
            else if (i == 0 || i == 1)
             return 1;
            else
             return i * factorial(i - 1);
           }

           public static int sum(int i) {
            if (i == 0)
             return 0;
            else
             return i + sum(i - 1);
           }

           public static int fibonacci(int i) {
            if (i == 0 || i == 1)
             return 1;
            else
             return fibonacci(i - 1) + fibonacci(i - 2);
           }

           public static void main(String[] args) {
            for (int i = 0; i < 5; i++) {
             System.out.println(i + "!= " + factorial(i));
             System.out.println("sum(" + i + "!) = " + sum(i));
             System.out.println("fibonacci(" + i + ")= " + fibonacci(i));
             System.out.println("=========================");
            }
           }

          }

          Feedback

          # re: java面試題:遞歸方法[未登錄]  回復  更多評論   

          2010-05-23 01:23 by hunter
          fibonacci這個函數算法效率有點低呀,有很多重復運算,當輸入值很大的時候就很慢咯~

          # re: java面試題:遞歸方法  回復  更多評論   

          2010-05-23 11:02 by java小爬蟲
          @hunter

          你說的對,遞歸調用次數太多的話,有java棧溢出的問題。即使沒有棧溢出的問題,遞歸次數多效率也是問題!

          下面是一種沒有用遞歸的方法:

          public static void fibonacci(int m) {
          long x = 1, y = 1;
          System.out.println("fibonacci(1) = "+x);
          for (int i = 1; i <= m; i++) {
          System.out.println("fibonacci("+(i+1)+") = "+y);
          y = x + y;
          x = y - x;
          }

          }

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 宜良县| 铁岭县| 商都县| 镇康县| 景泰县| 从江县| 舒兰市| 静宁县| 肃南| 平原县| 兴义市| 盐池县| 元朗区| 桐乡市| 天台县| 泰顺县| 泗洪县| 龙江县| 晋城| 龙井市| 灵山县| 灌云县| 苏尼特右旗| 潞城市| 金沙县| 铁岭县| 沿河| 石阡县| 绥化市| 宜良县| 孝义市| 龙陵县| 女性| 汉川市| 府谷县| 疏附县| 林口县| 郧西县| 贵港市| 民丰县| 滦南县|