• 跟着阿里学JavaDay06——Java基础语法(四)


    一、方法

     方法执行到return语句后,这个方法的执行就结束了,方法可以有返回值,但可以不用这个返回值方法首先要定义,然后才能调用。

    public class TestMethod{
        public static void main(String args[]){
            m();
            m1(3);
            m2(2,3);
            int i = m3(4,5);
            System.out.println(i);
        }
        //以下定义的都是静态方法,静态方法可以在main()方法里面直接调用
        public static void m(){
                System.out.println("Hello!");
            }
    
        public static void m1(int i){
                if(i==5){
                        return;
                    }
                System.out.println(i);
            }
    
        public static void m2(int i,int j){
                System.out.println(i+j);
            }
    
        public static int m3(int i,int j){
                return i+j;
            }
    }
    View Code

    二、变量的作用域

    变量的作用域只在“{  }”有效,出了这个“{  }”就没有作用了

    三、递归调用

    递归:在一个方法内部对自身的调用就称为递归

     可能很多同学还是看不懂上图的分析,下面我们来分解一下method方法这个递归函数:

    首先,method(5):return  5*method(4);

    这里的method(4):return  4*method(3);

    接着来method(3):return  3*method(2);

    紧接着method(2):return  2*method(1);

    终于到了method(1):return  1;

    细心的同学发现了,这是一个求阶乘的函数,这里求5!;我们从上面分析的逆向看,是不是可以得出1*2*3*4*5呢??

    我们的递归函数需要从逆向思维去编写,为什么呢?

    因为方法传进来的形参,就是我们的计算终止最大值;若我们从最小值1开始算,那传进来的形参是1的话,就不能设置上限值了。

    因此我们的递归方法,也需要有一个计算起始和终止域。而起始域即我们方法的终止域(这里是1);终止域是我们的起始域(这里是形参);

    我们再来个趣味数学题(猴子吃桃问题):

    猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?(先思考一下,再点开看分析和源代码)

    /*猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。
    第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
    以后每天早上都吃了前一天剩的一半零一个。
    到第10天早上想再吃时,见只剩下一个桃子了。
    求第一天共摘了多少桃子?
    
    我们首先来定义几个变量:day(天数)、peach(桃子的个数)
    然后分析确定的终止值:这里我们的第10天只剩下1个桃子就是我们的终止最小值;
    那么我们的最大值呢??
    我们的最大值根据题目可以分析得出:第day天有peach个桃子;
    可能到这里有些同学就懵了。我们不妨想一下,把题目问的第一天改成第9天试试:
    第9天摘了多少个桃子?
    是不是(1+1)*2=4个呢?
    第8天呢?
    是不是(4+1)*2=10个呢?
    从上面可以看出,我们要知道第8天的数量;
    是不是就需要知道第9天的数量然后加1乘2就可以了
    同理,我们要知道第1天的数量;
    就需要知道第2天的数量然后加1乘2
    既有(peach(day+1)+1)*2;
    */
    
    public class MonkeyPeach{
        public static void main(String[] args){
            System.out.println(peach(1));
        }
        public static int peach(int day){
            if(day<1||day>10){
                return 0;
            }else if(day == 10){
                return 1;
            }else{
                return (peach(day+1)+1)*2;
            }
        }
    }
    View Code

    感谢阿里云开发者社区,让我有整套系统的Java学习教程

    同时,感谢博客园,让我有一个免费的博客,并让我做笔记学习!!

  • 相关阅读:
    Python实现ftp服务(1)
    MYSQL/HIVESQL笔试题(六):HIVESQL(六)
    Hive基础(16):Hive函数(8) 常用函数
    MYSQL/HIVESQL笔试题(五):HIVESQL(五)
    MYSQL/HIVESQL笔试题(四):HIVESQL(四)
    MYSQL/HIVESQL笔试题(三):HIVESQL(三)
    498. Diagonal Traverse
    493. Reverse Pairs
    1021. Remove Outermost Parentheses
    490. The Maze
  • 原文地址:https://www.cnblogs.com/Cion-Da/p/13035874.html
Copyright © 2020-2023  润新知