Java方法-------重载和递归详解

目录

一.Java方法的定义与使用、

1.方法的定义

2.方法的使用

二.重载

三.递归

1.递归的定义和使用

2.青蛙跳台阶


一.Java方法的定义与使用、

        在使用Java的时候我们需要用代码去实现各种各样的功能,如果将它们放在同一个主函数当中就会使代码显得十分地臃肿不堪,可读性也直线下降。所以我们在实现某个功能的时候会将它另外封装成一个方法,那么不仅可以反复使用它而且增强了代码的美观度和可读性。

下面我们来说一说如何正确定义和使用一个方法吧!

1.方法的定义

我们以一个简单的加法函数为例:

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int x = scan.nextInt();
        int y = scan.nextInt();
        int a = add(x, y);
        System.out.println(a);
    }
    public static int add(int x, int y) {
        return x + y;
    }

        我们仔细观察一下:1.方法在被定义的时候一定要注意,是否需要返回值。根据有无返回值和返回值的类型不同我们在方法明前应当声明出来。如果没有返回值便声明一个void,以上述代码为例,我们需要返回x和y的和,而x和y都是int类型,因此我们也需要返回一个int类型的x+y。

2.方法的使用

          在主函数当中,我们在调用自己定义的加法函数add的时候因其是有int类型的返回值的,因此我们同样需要定义一个int类型的变量来接收它的返回值。下面我们来运行这段代码试试。

        输入了两个数字后,我们可以看到这个方法已经实现了加法功能。

二.重载

        讲完了刚刚的一个例子,相信大家已经对Java当中方法的定义已经有了初步的了解了。那么我们可以设想一个情况:我们有时是整形相加运算,那么我们在需要进行double或是float类型的运算时刚刚定义的方法还能使用吗?答案是否定的。之前我们讲过int类型的数据是4个字节而double类型的数据是8个字节,因此二者正常情况下是并不可以进行运算的。

       所以,当我们需要不同的数据运算的时候可以使用方法的重载。以add函数为例:

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int x = scan.nextInt();
        int y = scan.nextInt();
        int a = add(x, y);
        double c = scan.nextDouble();
        double d = scan.nextDouble();
        double f = add(c,d);
        System.out.println(a);
        System.out.println(f);
    }
    public static int add(int x, int y) {
        return x + y;
    }
    public static double add(double x, double y) {
        return x + y;
    }

我们在原来加法函数的下面重新定义了一个add方法,仔细观察可以发现:1.这两个方法的返回值不同  2.形参类型不同 。

我们执行一下试试:

 显然,这两个方法都完成了对应的功能。

下面我们来说一下方法的重载需要注意的点:

1.方法名必须与已有方法的方法名相同,否则便不是重载。

2.重载方法的返回值不做要求,可以与原来相同也可以不同。

3.重载方法的形参必须与原来不一样,可以是个数上的不同也可以是类型上的不同。

三.递归

1.递归的定义和使用

在某些特殊的方法中,我们可以看到方法自己调用自己的情况。我们把这类方法叫做递归。

在使用递归的时候要注意:调用时应有约束条件,每递归一次会更加接近这个条件,当满足时递归停止。

下面我们来讲解一个简单递归方法的调用过程:

public static void main(String[] args) {
        int a = 4;
        int b = sum(a);
        System.out.println(b);
    }
    public static int sum(int n) {
        if(n == 1) {
            return 1;
        } else {
            return n + sum(n - 1);
        }
    }

这是使用递归来求1+2+3+4的值,我们来深入剖析一下这段代码:

 上图中蓝色的线代表递,红色的代表归。当n一开始进入函数时,n=4,那么不满足if,所以走else,返回的结果是4 + sum(n - 1)。以此类推,最后n=1逐级返回得到和。

2.青蛙跳台阶

下面有一个有趣的问题:一只青蛙可以一次跳上一级台阶,也可以一次跳上两级台阶,那么有n级台阶,问:青蛙要跳完这n级台阶一共有几种跳法?

我们先来分析一下这个问题:

假如:

1级台阶,那么青蛙只有1种跳法。

2级台阶:第一种:两次1级。第二种:一次2级。

3级台阶:第一种:三次1级。第二种:一开始2级最后1级。第三种:一开始1级,最后2级。

4级台阶:

 

 上图中一种颜色的箭头代表一种跳法,可知一共有5种跳法

到这里我们可以发现,n级台阶的跳法就是n-1级和n-2级台阶的跳法数量的和。

所以我们可以使用递归:

    /**
     * 青蛙跳台阶
     * @param args
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入台阶数:");
        int n = scan.nextInt();
        int num = jump(n);
        System.out.println("有" + num + "种跳法");
    }
    public static int jump(int n) {
        if(n <= 2) {
            return n;
        } else {
            return jump(n - 1) + jump(n - 2);
        }
    }

那么10级台阶的跳法的数量为:

 

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值