一 方法(类似于C语言中的函数)
1 方法的基本语法:
// 方法定义 public static 方法返回值 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值]; } // 方法调用 返回值变量 = 方法名称(实参...);
示例:
import java.util.Scanner; public class demotwo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = sc.nextInt(); int j = sc.nextInt(); int ret=add(i,j);//方法的调用 System.out.println(ret); } //利用方法实现两个数相加 public static int add(int a,int b){//定义方法 return a+b; } }
2 注意事项
(1)public static是关键字,具有特殊的含义
(2)方法定义时,必须要指定参数类型,可以没有参数
(3)方法定义时,可以有返回值,也可以没有返回值,没有返回值时,返回类型应该定义为void
(4)方法定义时的参数为形参,方法调用时就是实参
(5)方法必须定义在类的里面,代码书写调用的位置可以在main()函数上方,也可以写在下方
(6)java中不存在函数声明这种概念
3 方法调用的执行过程
(1)定义方法的时候,不会执行方法的代码,只有调用的时候才会执行
(2)方法被调用的时候,实参的值会赋值给形参
(3)参数传递完毕后,就会执行方法体代码
(4)当方法执行完毕之后(遇到return语句),回到方法被调用的位置,继续往下执行
(5)方法是可以被多次调用的
例题:
public class demotwo { //计算 1! + 2! + 3! + 4! + 5! public static void main(String[] args) { int su = 0; for(int i=1;i<=5;i++){//产生五个数据,利用求阶乘,把五个数的阶乘相加起来 su += sum(i); } System.out.println(su); } public static int sum(int n){ int ret =1; for(int j = 1;j<=n;j++){//实现阶乘的办法 ret *=j; } return ret; } }
4 方法的重载
重载的规则(满足以下三个特点):
在同一个类下或者继承关系下:
(1)方法名相同
(2)方法的参数不同(参数的个数或者参数类型不同)
(3)参数的返回值类型不影响重载(可以理解为与返回值类型没有什么关系)
5 方法的意义
(1)能够模块化的组织代码(尤其是代码规模是比较复杂的时候)
(2)让代码更加简单,提高代码的可读性
(3)可以重复利用,一个代码可以在多个位置调用
(4)可以直接调用现有方法开发,比较便捷
二 递归
前提条件:
(1)有一个趋于终止的条件
(2)自己要调用自己
概念:
递归:一个方法在执行的过程中调用自身,就称为递归
递归执行过程分析:
public static void main(String[] args) { int n = 5; int ret = factor(n); System.out.println("ret = " + ret); } public static int factor(int n) { System.out.println("函数开始, n = " + n); if (n == 1) { System.out.println("函数结束, n = 1 ret = 1"); return 1; } int ret = n * factor(n - 1); System.out.println("函数结束, n = " + n + " ret = " + ret); return ret; } // 执行结果 函数开始, n = 5 函数开始, n = 4 函数开始, n = 3 函数开始, n = 2 函数开始, n = 1 函数结束, n = 1 ret = 1 函数结束, n = 2 ret = 2 函数结束, n = 3 ret = 6 函数结束, n = 4 ret = 24 函数结束, n = 5 ret = 120 ret = 120
执行过程图
结合执行过程图来看递归就会显得思路比较清晰,解决问题就会显得有方法与思路
递归的总结:
对于递归,有些问题使用递归就会显得非常简单(比如二叉树以及斐波那契数列等),有些程序代码递归与非递归(迭代循环)都可以去实现,那么这个时候就推荐大家使用非递归(迭代循环),效率会显得高一些。
三 递归练习
面对递归,我们需要一些典例来开导一下我们,典例链接: