java面試題:遞歸方法

          Posted on 2010-05-22 13:40 java小爬蟲 閱讀(3354) 評論(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;
          }

          }

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


          網站導航:
           
          主站蜘蛛池模板: 泾川县| 德钦县| 柳林县| 波密县| 麻城市| 雅安市| 时尚| 交口县| 长汀县| 肥城市| 雷波县| 泸西县| 呼图壁县| 抚州市| 曲靖市| 普格县| 九江县| 开原市| 乌鲁木齐县| 南投县| 蓬溪县| 颍上县| 方正县| 惠来县| 上虞市| 达州市| 和平区| 中山市| 锡林浩特市| 平安县| 邳州市| 尖扎县| 永靖县| 霍山县| 永新县| 汝南县| 黄梅县| 博爱县| 通城县| 仪征市| 南昌县|