0


认识方法与递归

认识方法

方法的作用

方法相当于C语言中的函数,主要用来解决一些规模较复杂的代码。

方法可以让代码更加简洁并且更好理解

方法可以重复利用

有些方法可以直接调用,不必自己一点点从零开始创造。

方法的注意事项

可以没有返回值

实参和形参没有关系,形参只是实参的拷贝

必须在类中定义

在Java中没有函数声明的概念

方法的重载

经典题型:重载和重写的区别(重写还不会)

在同一个类当中,方法名相同,参数列表不同(类型与数量)的一组方法,与返回值无关。

详情查看博客: 方法的重载_小白的含金量的博客-CSDN博客

方法递归

什么是递归

递归概念

在一个方法内部自己调用自己的过程称之为递归

public static void test(){
  test();
}

递归的子过程

递过程:函数不断调用自身,直到走到函数的终止条件,第一阶段结束。

归过程:从终止条件不断返回的过程。

递归可用场景

1.一个大问题可以拆分成若干子问题的解

2.拆分后的子问题与原问题除数据规模不同,解决思路完全相同

3.必须存在终止条件

如何写出递归

不要纠结递归方法的中间部分如何实现,就当是一个别人已经写好的方法你来调用,把重心放在函数的功能上。

递归思路

终止条件+不借助外力就可实现的步骤(我可以整)+剩下的问题交给下一次解决(我整不了,别人给我整)。

终止条件就是不需要借助任何函数就能得到的值

递归举例

n的阶乘

不借助外力只知道n这个数字,且n=1时,不需任何函数我就知道他的阶乘就是1

public class Test6 {
    public static void main(String[] args) {
        System.out.println("输入数字n并计算n的阶乘");
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int num = facNum(n);
        System.out.println("阶乘为 "+num);
    }
    public  static  int facNum(int n) {
        if(n==1) {
            return 1;
        }
        return n*facNum(n-1);
    }
}

看一下中间过程

public class Test6 {
    public static void main(String[] args) {
        System.out.println("输入数字n并计算n的阶乘");
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int num = facNum(n);
        System.out.println("阶乘为 "+num);
    }
    public  static  int facNum(int n) {
        System.out.println("函数开始, n = "+n);
        if(n==1) {
            System.out.println("函数结束, n = 1,ret = 1");
            return 1;
        }
        int ret = n*facNum(n-1);
        System.out.println("函数结束,n = "+n+",ret = "+ret);
        return ret;
    }
}

正序打印

终止条件是当n小于10的时候,他的个位数就是他的整个数字,打印并且return终止即可。

当n大于10,不需借助外力,我可以知道他的个位是多少(n%10)。

但是因为我需要正序打印,所以我要先找到最高位。所以先递归n/10

public class Test5 {
    public static void main(String[] args) {
        System.out.println("输入一个数并打印每一位");
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        printNum(n);
    }
    public  static  void  printNum(int n) {
        //终止条件
        if(n<10) {
            System.out.print(n+" ");
            return;
        }
        //先找高位
        printNum(n/10);
        //高位已经打印过了,直接打印个位即可
        System.out.print(n%10+" ");
    }
}

逆序就是一位位打印之后再去往高位找,把最后两行代码换位即可。

斐波那契数列

此递归主要用数学归纳法来做,类似的题有青蛙跳台阶及进阶版,可参考

递归——进阶青蛙跳台阶_小白的含金量的博客-CSDN博客

汉诺塔

递归问题——汉诺塔_小白的含金量的博客-CSDN博客

标签: java

本文转载自: https://blog.csdn.net/weixin_65278827/article/details/124057877
版权归原作者 小白的含金量 所有, 如有侵权,请联系我们删除。

“认识方法与递归”的评论:

还没有评论