zoukankan      html  css  js  c++  java
  • 跟着阿里学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学习教程

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

  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/Cion-Da/p/13035874.html
Copyright © 2011-2022 走看看