【Java探索之旅】方法重载 递归

这篇具有很好参考价值的文章主要介绍了【Java探索之旅】方法重载 递归。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言
🎥 屿小夏 : 个人主页
🔥个人专栏 : Java编程秘籍
🌄 莫道桑榆晚,为霞尚满天!

📑前言

方法重载和递归是编程中常见且重要的概念,它们为我们解决问题提供了灵活且高效的方式。方法重载让我们可以根据不同的参数类型来定义同名方法,使代码更具可读性和灵活性;而递归则是一种强大的解决复杂问题的方法,通过将问题分解为子问题并逐步解决,展现出了独特的魅力和实用性。让我们一起深入探讨这两个主题,探索它们的内涵和应用。

一、方法重载

1.1 为什么要有方法重载

假设现在我们需要求两个数的和,要求根据数据的类型返回相应的返回值。那么就需要写一个整数和的方法、一个浮点数和的方法。如果类似的要求很多,你取名字都是一件极其麻烦的事情,这里就需要用到方法的重载了。

1.2 方法重载的概念与使用

在自然语言中,经常会出现“一词多义”的现象,比如:“好人”。

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言

在编程语言中,一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。

在Java中方法也是可以重载的。如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。

public static void print(int a,int b) {
    System.out.println(a+b);
}
public static void print(float a,float b) {
    System.out.println(a+b);
}
public static void print(float a,float b,float c) {
    System.out.println(a+b+c);
}
public static void main(String[] args) {
    int a = 10;
    int b = 20;
    print(a,b);
    float c = 3.14f;
    float d = 5.5f;
    float e = 8.8f;
    print(c,d);
    print(c,d,e);
}

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言

注意事项

  1. 方法名必须相同
  2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
  3. 与返回值类型是否相同无关
  4. 编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

1.3 方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?

方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

public class TestMethod {
    public static int add(int x, int y){
        return x + y;
    }
    public static double add(double x, double y){
        return x + y;
    }
    public static void main(String[] args) {
        add(1,2);
        add(1.5, 2.5);
    }
}

上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看

具体操作

  1. 先对工程进行编译生成.class字节码文件
  2. 在控制台中进入到要查看的.class所在的目录
  3. 输入:javap -v 字节码文件名字即可

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言

方法签名中的一些特殊符号说明

特殊字符 数据类型
V void
Z boolean
B byte
C char
S short
I int
J long
F float
D double
[ 数组(以[开头,配合其他的特殊字符,表述对应数据类型的数组,几个[表述几维数组)
L 引用类型,以L开头,以;结尾,中间是引用类型的全类名

二、递归

2.1 开篇小故事

从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是:"从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是:“从前有座山,山上有座庙…”“从前有座山……”

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言

上面的这个故事有个特征:

​ 自身中又包含了自己,该种思想在数学和编程中非常有用,因为有些时候,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。

2.2 递归的概念

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

例如, 我们求 N!

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

2.3 递归的必要条件

  1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
  2. 递归出口

2.4 代码示例

递归求 N 的阶乘

public static int facTow(int n) {
    if(n == 1) {
        return 1;
    }
    return n * facTow(n-1);
}
public static void main(String[] args) {
    int a= 5;
    int ret = facTow(a);
    System.out.println(ret);
}

上述代码就运用到了递归,本质上就是自己调用自己,这里必须要有停止的条件,不然就会陷入死递归。

2.5 递归的执行流程剖析

递归的程序的执行过程不太容易理解, 要想理解清楚递归, 必须先理解清楚 “方法的执行过程”, 尤其是 “方法执行结束之后, 回到调用位置继续往下执行”

public static int facThree(int n) {
    System.out.println("方法开始="+n);
    if(n == 1) {
        System.out.println("方法结束:n = 1,ret = 1");
        return 1;
    }
    int ret = n * facThree(n-1);
    System.out.println("方法结束"+" n = "+n+" ret = "+ret);
    return ret;
}
public static void main(String[] args) {
    int a= 5;
    int ret = facThree(a);
    System.out.println(ret);
}

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言

关于 “调用栈”

  1. 方法调用的时候, 会有一个 “栈” 这样的内存空间描述当前的调用关系. 称为调用栈.
  2. 每一次的方法调用就称为一个 “栈帧”, 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息.

扩展:

递归中有一些十分经典的问题:斐波那契数列、青蛙跳台阶、汉诺塔…感兴趣的小伙伴可以自行了解哦,后期也是会出一些这种的解题思路和方法,敬请期待!

时候, 会有一个 “栈” 这样的内存空间描述当前的调用关系. 称为调用栈.
2. 每一次的方法调用就称为一个 “栈帧”, 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息.

扩展:

递归中有一些十分经典的问题:斐波那契数列、青蛙跳台阶、汉诺塔…感兴趣的小伙伴可以自行了解哦,后期也是会出一些这种的解题思路和方法,敬请期待!

【Java探索之旅】方法重载 递归,Java之光,java,python,开发语言文章来源地址https://www.toymoban.com/news/detail-852502.html

到了这里,关于【Java探索之旅】方法重载 递归的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java探索之旅】方法的概念 定义 执行流程 实参与形参的交互

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 方法是Java编程中非常重要的概念,它能够帮助我们组织代码、实现代码的重复使用,并使代码更加清晰易懂。本文将介绍方法的概念、定义以及调用执行过程,同时解释实参和形参之间的关

    2024年04月14日
    浏览(29)
  • 开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)

    之前浅显的讲解了数据结构的部分内容:数据结构专栏 那么今天我们迎来了新的起点:C++的探索之旅 在c中: 严格的编译器会直接 报错 : rand我们都知道是产生随机数的函数,现在我定义了一个全局变量rand,显然是有 命名冲突 所以c++就提供了解决方案 想必学过c的大家第一

    2024年02月01日
    浏览(36)
  • 【Java探索之旅】解密Java中的类型转换与类型提升

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 在Java编程中,类型转换是一个重要的概念,尤其在不同数据类型之间进行赋值和运算时。本文将介绍Java中的自动类型转换和强制类型转换,以及类型提升的概念。通过本文的学习,您将深入

    2024年03月17日
    浏览(32)
  • 【java探索之旅】逻辑控制掌握 顺序结构 分支语句

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 逻辑控制是现代编程语言中的基本概念之一,它允许程序根据特定条件来决定执行流程,使程序能够根据不同情况做出相应的处理。在编写程序时,合理运用逻辑控制可以提高代码的灵活性和

    2024年04月10日
    浏览(36)
  • 【Java探索之旅】掌握数组操作,轻松应对编程挑战

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 掌握数组的基本操作对于编写高效的程序至关重要。本文将深入探讨数组的一些常见操作,包括数组转字符串、数组拷贝、求平均值、顺序查找、二分查找、数组排序等。通过学习这些操作,

    2024年04月27日
    浏览(26)
  • 【Java探索之旅】从输入输出到猜数字游戏

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 本文将介绍如何在Java中进行控制台的输入输出操作,并通过一个简单的猜数字游戏示例来展示分支语句、循环语句的运用。让我们一起来探索这些有趣的编程技巧吧! 基本语法 : println 输出

    2024年04月16日
    浏览(22)
  • 【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java入门到精通 🌄 莫道桑榆晚,为霞尚满天! 在Java编程中,注释、标识符和都是非常重要的概念。注释可以帮助我们更好地理解和维护代码,而规范的标识符命名和避免冲突可以提高代码的可读性和可维护性。本文将介

    2024年02月04日
    浏览(34)
  • 【Java探索之旅】我与Java的初相识(一):Java的特性与优点及其发展史

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java入门到精通 🌄 莫道桑榆晚,为霞尚满天! ​ Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。 ​ 不仅如此Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软

    2024年02月05日
    浏览(32)
  • 【Java探索之旅】数据类型与变量,字面常量,整型变量

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java入门到精通 🌄 莫道桑榆晚,为霞尚满天! 在Java编程中,理解常量、数据类型以及变量是构建程序逻辑的基础。本文将深入介绍Java中的字面常量、数据类型和整型变量,帮助读者掌握这些基础概念,为编写高效的Java程序打下坚实基

    2024年03月11日
    浏览(36)
  • 探索Java中的Set集合:独一无二的元素之旅

     在Java编程中,我们经常需要处理一组元素,并且确保其中没有重复的元素。为了满足这一需求,Java提供了一个强大的数据结构——Set集合。Set集合是一种无序且不允许重复元素的集合,提供了高效的去重和查找功能。本文将深入探索Java中的Set集合,介绍其基本概念、常见

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包