1.程序设计思想:引入标志位
2.方法(函数):代码复用。某些代码块会被多处代码重复使用,这些代码就应该抽象成方法,被需要使用的地方调用,这样就可以减少很多重复代码的定义。
(1)语法:
public static 返回值 方法名称(参数类型 参数名称... 多个参数(0~n)){
return 方法的返回值 //若方法无返回值,return语句可以忽略不屑,若有返回值,return语句必须要写
}
eg:定义一个方法判断一个年份是否时闰年-->执行方法后需要告诉是或者不是
public static boolean isPrime ( int year){ }
PS:方法的返回值以及返回值的类型、有无参数以及参数的类型要取决于该方法的作用。
PS:方法命名采用小驼峰命名法,一般来说,返回值为boolean类型的方法采用is开头,一次表达是或否。
调用方法-->传递参数-->执行具体的方法体-->方法执行结束(遇到return 语句或所有方法体代码执行结束)-->回到调用出继续执行
PS:程序的入口就是从主方法main开始向下执行。
(3)Java方法中的参数传递--->只有值传递
形参:形式参数,方法定义时,还不知道具体参数值,只知道当前方法定义时参数的类型。eg:
实参:具体调用某个方法时,向方法传递的参数称为实参,此时就有了具体的值传递给方法。eg:
PS:在Java中,无论形参和实参的类型是什么,实参的值永远都是拷贝一份赋值给形参。形参和实参本质上是两个不同的实体,两者彼此不影响。
PS:若某些方法没有返回值,在定义方法时使用voic关键字表示该方法没有返回值(不能忽略),仍然可以在没有返回值的方法中使用 return ,表示结束当前方法的使用。eg:
(4)方法重载(overload):在同一个类中,定义了若干个方法名称相同,参数列表不同(参数类型或个数不同),与返回值无关的一组方法,这样的一组方法称为重载方法。
重载方法的引出:定义多个不同名称的方法时,每当传入不同的参数时,就得调用不同的名称-->用户的使用成本太高,需要记很多的方法名称。
使用重载方法 --> 方法名称相同,参数列表不同(重载方法一定与方法的返回值无关)。
eg:JDK中每天都在用System.out.println(传递任何参数都可以进行打印) --> 定义了n个重载方法。
(5)方法签名
(6)方法递归:一种程序设计的结构。一个方法不断调用自身,这种方法就称之为方法递归。
1》使用场景(缺一不可):
原问题可以拆分为多个子问题的解;
拆分后的子问题和原问题除了数据规模、大小不同外,解决的思路完全相同;
存在递归的终止条件(拆分子问题的过程时有限的,不可能一直这么拆分下去)。
2》如何写出正确的递归函数:
抓语义(这个函数的作用):再写递归函数时,一定要抓住传递递归函数的语义(这个函数写出来到底在解决什么问题);
写当前(当前函数内部已知条件是什么,只能解决什么问题):在具体编程时,就假设这个函数就已经实现好了,只需要利用这个函数帮助解决问题即可;
找终止(拆分的最后一个子问题是什么):把我递归函数的终止条件。
3》
近距离观察递归函数--->一步步看递归函数内部的运行逻辑--->递归函数就是函数的一步步调用
归:不断拆分的过程中,碰到子问题的边界,就开始从边界条件处开始依次返回。
写的思路:从顶向下再思考问题
展开的过程:从下向上依次返回
4》斐波那契数
--》递归求解--》自上向下求解问题(自顶向下、宏观思考)
PS:类似斐波那契数这种递归函数,写起来容易些,但是执行效率会比较低(与循环相比)。递归求解fibo(n),很多fibo数会被重复进行计算。
--》非递归求解--》自下向上求解问题
5》汉诺塔问题
开始时所有的盘子都是从小到大放在A塔上的,选择需要将A塔上的所有盘子移动到C塔上,移动时,只能小盘子放在大盘子上,不能改变其顺序。