zoukankan      html  css  js  c++  java
  • Java方法的递归调用求100以内自然数的累加和以及斐波拉契数列

    问题:

    求100以内自然数的累加和。1+2+3+4+5...+98+99+10

    考察:方法的递归调用

    难点:

    递归调用可以看作的循环,既然时循环就要有结束循环的条件,不然就是个死循环。

    方法一:

    用for循环来实现累加求和。难点在于,要定义一个变量"sum"来接收每次相加的和。

     @Test
        public void add() {
    
            int sum=0;
            for(int i=1;i<=100;i++){
                sum+=i;
            }
            System.out.println("sum:="+sum);
        }

    方法二:

    用方法的递归调用来实现。难点:首先考虑在什么情况下循环会结束,然递归时值不断向结束循环的情况改变。

        public static int recall(int n) {
    
            if(n==1){
                return 1;
            }else{
        //在方法体中调用方法自己就是递归调用。
    //下面的n-1,经过多次递归调用后,n的值会变为1,而当n等于1时,函数就结束了,直接renturn了。
    return n+recall(n-1); } }

    斐波拉契数列:

    从第三项开始,每个数都等于前面两个数的和。

    1,1,2,3,5,8,13,21,34,55,89,144...

    一:

    用for循环结算斐波拉契数列。只能计算小于等于92的情况,因为当大于92时,计算结果就超出了long整形的表示范围。

        public static long fibLoop(int num) {
            if (num < 1 || num>92)
                return 0;
            long a = 1;
            long b = 1;
            long temp;
            for (int i = 3; i <= num; i++) {
                temp = a;
                a = b;
                b += temp;
            }
            return b;
        }

    二:

    用递归调用实现斐波拉契数列。

        public static long fibRec(int num) {
            if(num < 1)
                return 0;
            if(num < 3)
                return 1;
            return fibRec(num - 1) + fibRec(num - 2);
    
        }

    三:

    用递归调用实现斐波拉契数列.支持超过92的大数。

       static List<BigDecimal> list = new ArrayList<BigDecimal>(93);
        static {
            list.add(BigDecimal.ZERO);
            list.add(BigDecimal.ONE);
        }
        /**
         * 1,2,3,4,5,6, 7 ,8
         * 1,1,2,3,5,8,13,21
         * 支持num超过92的超大型数字,使用了ArrayList进行缓存以提高性能
         */
        public static BigDecimal fibBig(int num) {
            if(num < 0)
                return list.get(0);
            if (list.size() <= num)
                list.add(fibBig(num - 1).add(fibBig(num - 2)));
            return list.get(num);
        }

    其它参考:

    https://www.cnblogs.com/swfpt/p/6850396.html

  • 相关阅读:
    NODE_PATH的疑难杂症(转)
    教你如何做一个优雅的Ecmascripter /转
    MDLMaterial Design Lite框架推荐
    GPU硬件加速原理 /转
    透明遮罩图层VS高斯模糊滤镜 效果分析
    QML vs WEB
    PixelMatorPro快捷键大全(osx)
    睡眠排序、面条排序、猴子排序...........................
    全栈设计模式套餐MVVM, RESTful, MVC的历史探索
    2018博客之星评选,我非常需要您宝贵的一票!♪(・ω・)ノ
  • 原文地址:https://www.cnblogs.com/majestyking/p/12401655.html
Copyright © 2011-2022 走看看