一、方法
方法执行到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; } }
二、变量的作用域
变量的作用域只在“{ }”有效,出了这个“{ }”就没有作用了
三、递归调用
递归:在一个方法内部对自身的调用就称为递归
可能很多同学还是看不懂上图的分析,下面我们来分解一下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; } } }
感谢阿里云开发者社区,让我有整套系统的Java学习教程
同时,感谢博客园,让我有一个免费的博客,并让我做笔记学习!!