Cion-Da

一、方法

 

 方法执行到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!");
            System.out.println("孤傲苍狼");
        }

    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学习教程

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

 

相关文章: