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

  • 相关阅读:
    Failed to load resource: the server responded with a status of 404 (Not Found) favicon.ico文件找不到
    合并排序
    python爬虫入门笔记--爬取垃圾分类查询【还有待改善】
    快速排序、合并排序和分治策略的基本思想
    动态规划的基本要素
    【转载】算法时间复杂度分析方法
    python爬虫入门笔记--知乎发现(爬取失败了)
    管理主界面的两个刷新操作
    把Excel选手名单信息导入到评委计分软件Access数据库的步骤
    评委打分回避功能的详细操作步骤
  • 原文地址:https://www.cnblogs.com/majestyking/p/12401655.html
Copyright © 2011-2022 走看看