方法、重载、递归

一、方法

方法的概念

类似于C语言中的“函数”,将多条语句打包成一个整体,可以重复使用

语法格式

//方法定义的语法格式
修饰符  返回值类型  方法名称([参数类型 形参 ...]{
    方法体代码;
    [return 返回值];
        }

修饰符:限定方法谁可以用,初学可直接使用public static 搭配
返回值类型:如果方法有返回值,返回值类型必须和返回的实体类型一致;如果没有返回值,必须写成void
java中,方法必须写在类当中,没有方法声明一说,且方法不能嵌套定义

//计算1!+2!+3!+4!+5!
public class Method {
    public static void main(String[] args) {
        int sum = 0;
        for(int i = 1;i <= 5;i++){
            sum += fac(i);
        }
        System.out.println("sum = " + sum);
    }

    public static int fac(int n){  
        int ret = 1;
        for(int i = 1;i <= n;i++){
            ret *= i;
        }
        return ret;
    }

}

实参和形参

方法调用时,传递的实参最终被方法的形参接收了;在Java中都是以值的方式接收的,C语言还可以传递指针。在方法中,形参修改之后,对实参没有任何影响。

 //计算5!
public class Method {
    public static void main(String[] args) {
       fac(5);//5是实参,在方法调用时,形参n用来保存5
        System.out.println(fac(5));
    }

    public static int fac(int n){  //n是形参
        int ret = 1;
        for(int i = 1;i <= n;i++){
            ret *= i;
        }
        return ret;
    }

}

二、重载

//求和
public class Method {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int ret = add(a, b);
        System.out.println("ret = " + ret);
       
        double a2 = 10.5;
        double b2 = 20.5;
        double ret2 = add(a2, b2);//编译出错,因为add方法中参数为int型,由double转为int会造成数据丢失
        System.out.println("ret2 = " + ret2);
    }
    public static int add(int x, int y) {
        return x + y;
    }
}

编译出错,因为add方法中参数为int型,由double转为int会造成数据丢失。
为了解决这一问题,可以添加一个addDouble方法

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

缺点:需要不同的方法名,需要起名,头发会变少,所以有了重载
重载:一词多义。如果多个方法的方法名相同,参数列表不同,则称该方法被重载了。

//求和
public class Method {
    public static void main(String[] args) {
        add(1, 2); // 调用add(int, int)
        add(1.5, 2.5); // 调用add(double, double)


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

注意:在类中,允许存在名字相同的方法---------必须构成方法重载;
参数列表(参数的个数、参数的类型、类型的次序)不同;
与返回值类型是否相同无关;
编译时,编译器会对实参类型进行推演,最终确定调用哪个方法。

三、递归

递归:一个方法直接或间接调用自己
递归的必要条件:1、将原问题划分成子问题,且子问题必须与原问题的解法相同;2、递归出口
递归的表现方式:1、问题本身是递归的;2、数据结构是递归的;3、概念是递归的

public class Method {
    public static void main(String[] args) {
        int n = 5;
        int ret = fac(n);
        System.out.println("5的阶乘: " + ret);
    }

    public static int fac(int n){
        if(n == 1){
            return 1;
        }
        return n *fac(n - 1);//调用fac()函数自身
    }

}

运行结果

5的阶乘: 120

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值