您的位置:首页 > 编程语言 > Java开发

Java中方法的基本用法、重载和递归

2020-01-11 15:12 127 查看

1. 方法的基本用法

1.1 什么是方法(method)

方法就是一个代码片段. 类似于 C 语言中的 “函数”.
方法存在的意义

1.是能够模块化的组织代码(当代码规模比较复杂的时候)。
2.做到代码被重复使用, 一份代码可以在多个位置使用。
3.让代码更好理解更简单。
4.直接调用现有方法开发, 不必重复造轮子。

1.2 方法定义语法

// 方法定义
public static 方法返回值 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
// 方法调用
返回值变量 = 方法名称(实参...);

实现一个方法实现两个整数相加

class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 方法的调用
int ret = add(a, b);
System.out.println("ret = " + ret);
}
// 方法的定义
public static int add(int x, int y) {
return x + y;
}
}
// 执行结果 ret = 30

1.3 方法调用的执行过程

基本规则
1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.
2.当方法被调用的时候, 会将实参赋值给形参.
3.参数传递完毕后, 就会执行到方法体代码.
4.当方法执行完毕之后(遇到 return 语句), 就执行完毕, 回到方法调用位置继续往下执行.
5.一个方法可以被多次调用.

计算 1! + 2! + 3! + 4! + 5

class Test {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += factor(i);
}
System.out.println("sum = " + sum);
}
public static int factor(int n) {
System.out.println("计算 n 的阶乘中! n = " + n);
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
}

1.4 实参和形参的关系

交换两个整形变量

class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}
}
// 运行结果 a = 10 b = 2

实参-----》形参传值的时候,一定要个数,类型都要匹配。
在方法的内部,不能嵌套方法,只能调用方法。
方法名采用小驼峰的方式 例如 :numberName();
实参给形参传值的方式有几种?
C:按值传递 按址传递
Java:按值传递 传引用———》引用也是值
特点: 形参的改变 并不会影响 实参的值

1.5 没有返回值的方法

方法的返回值是可选的. 有些时候可以没有

class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
print(a, b);
}
public static void print(int x, int y) {
System.out.println("x = " + x + " y = " + y);
}
}

另外, 如刚才的交换两个整数的方法, 就是没有返回值的.

2. 方法的重载

有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载

针对同一个类:
方法名相同
方法的参数不同(参数个数或者参数类型)
方法的返回值类型不影响重载.

class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
}

public static int add(int x, int y) {
return x + y;
}

public static double add(int x, int y) {
return x + y;
}
}

// 编译出错 Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {
^
1 个错误

当两个方法的名字相同, 参数也相同, 但是返回值不同的时候, 不构成重载.

3. 方法递归

一个方法在执行过程中调用自身, 就称为 “递归”。
递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.

例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.
递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!
递归求 N 的阶乘

import java.util.Scanner;
public class Lzc{
public static int zed(int n){
if(n == 1){
return 1;
}
return n *zed(n - 1);
}
public static void main (String[] args){
System.out.println("请输入n的值:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
System.out.println(zed(n));
}
}

递归求 1 + 2 + 3 + … + 10

public static int yasuo(int n){
if (n == 1){
return 1;
}
return n + yasuo(n - 1);
}
public static void main(String[] args){
System.out.println(yasuo(10));
}

求斐波那契数列的第 N 项

public static int feibonaco(int n){
if (n ==1 || n == 2){
return 1;
}else{
return	feibonaco(n - 1) + feibonaco(n - 2);
}
}
public static void main(String[] args){
System.out.println("请输入斐波那契数列的第n项:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int num = feibonaco(n);
System.out.println(num);
}

递归小结

递归是一种重要的编程解决问题的方式.
有些问题天然就是使用递归方式定义的(例如斐波那契数列, 二叉树等), 此时使用递归就很容易解
有些问题使用递归和使用非递归(循环)都可以解决. 那么此时更推荐使用循环, 相比于递归, 非递归程序更加高效.

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Dark、Memary 发布了9 篇原创文章 · 获赞 8 · 访问量 442 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: