深入理解 Java 方法重载与递归应用
Java 方法重载
方法重载 允许在同一个类中定义多个具有相同名称的方法,但 参数列表 必须不同。
语法:
returnType methodName(parameter1, parameter2, ..., parameterN) {
// 方法体
}
示例:
public class Main {
// 重载 add 方法,支持 int 和 double 类型参数
static int add(int x, int y) {
return x + y;
}
static double add(double x, double y) {
return x + y;
}
public static void main(String[] args) {
int sum1 = add(10, 20);
double sum2 = add(3.14, 1.618);
System.out.println("int: " + sum1);
System.out.println("double: " + sum2);
}
}
输出:
int: 30
double: 4.758
解释:
- 该示例中定义了两个
add方法:- 一个接受两个
int型参数并返回int型结果。 - 另一个接受两个
double型参数并返回double型结果。
- 一个接受两个
- 在
main方法中,我们分别调用了两个add方法并打印了结果。
重载的好处:
- 可以使代码更加简洁易读。
- 可以提高代码的可重用性。
重载的注意事项:
- 方法的返回值类型可以不同。
- 方法的访问权限不能不同。
- 方法不能声明为
static或final。
总结
- 方法重载允许在同一个类中定义多个具有相同名称的方法,但参数列表必须不同。
- 重载可以使代码更加简洁易读,提高代码的可重用性。
- 重载时需要注意返回值类型、访问权限、static 和 final 修饰符等限制。
Java 递归
递归 是一种让函数调用自身的技术。它提供了一种将复杂问题分解为简单问题的方法,这样更容易解决。
理解递归
递归可能有点难以理解。理解它的最好方法是通过实验来了解它是如何工作的。
递归示例
将两个数字相加很容易,但将一系列数字相加更复杂。在下面的示例中,使用递归通过将其分解为添加两个数字的简单任务来将一系列数字相加:
public class Main {
public static void main(String[] args) {
int result = sum(10);
System.out.println(result);
}
public static int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
}
示例解释
- 当调用
sum()函数时,它将参数k添加到所有小于k的数字的和并返回结果。 - 当
k变为 0 时,函数只返回 0。 - 运行时,程序按照以下步骤执行:
10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
- 由于当
k为 0 时函数不再调用自身,程序在此停止并返回结果。
停止条件
就像循环可能陷入无限循环问题一样,递归函数可能陷入无限递归问题。无限递归是指函数永远不停止调用自身。每个递归函数都应该有一个 停止条件,即函数停止调用自身的条件。
停止条件示例
在前面的示例中,停止条件是参数 k 变为 0 时。
另一个停止条件示例
在这个例子中,函数将在开始和结束之间的一系列数字相加。这个递归函数的停止条件是当 end 不大于 start 时:
public class Main {
public static void main(String[] args) {
int result = sum(5, 10);
System.out.println(result);
}
public static int sum(int start, int end) {
if (end > start) {
return end + sum(start, end - 1);
} else {
return end;
}
}
}
递归的注意事项
- 开发人员在使用递归时应非常小心,因为很容易陷入编写永远不会终止的函数或使用大量内存或处理器资源的函数。
- 然而,正确编写时,递归可以是一种非常高效和数学上优雅的编程方法。
递归的应用场景
递归可以用于解决许多不同类型的编程问题,例如:
- 计算阶乘
- 计算斐波那契数列
- 遍历树形结构
- 解析数学表达式
- 生成各种图形
学习递归
- 递归是一个重要的编程概念,学习它可以帮助你解决更复杂的问题。
- 有许多资源可以帮助你学习递归,例如书籍、网站和在线教程。
- 通过练习,你将能够更好地理
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
深入理解 Java 方法重载与递归应用的更多相关文章
- java方法——重载2
什么是Java方法重载 方法重载的定义 1 对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数.类型.顺序至少有一个不一样,这时候局构成方法重载. END 方法重载示例 1 pu ...
- Java 方法重载 方法重写
方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...
- Java 方法重载和多态
先来看看什么是方法重载? 方法重载的要求是:方法名相同,参数列表不同(不同的参数类型或者参数顺序或者参数个数).至于方法的其他部分,如方法返回值类型和修饰符,与方法重载没有任何关系.最好加上@Over ...
- 《Java基础知识》Java方法重载和重写
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...
- Java方法重载
Java允许一个类中定义多个方法,只要参数列表不同就行了.如果同一个类中包含了两个或者两个以上的方法的方法名相同,但形参列表不同,则被称为方法重载. /* 参数类型不同的重载 */ public cl ...
- Java 方法重载,方法重写(覆盖),继承等细节注意
1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的 ...
- java方法重载和重写
1.java的方法重载和重写,表示两种不同的类型.this关键字,出现在类的构造方法中,代表使用该构造方法所创建的对象.,this可以出现在实例方法中核构造方法中.但是不能出现在类方法中.实例方法只能 ...
- [Java学习] Java方法重载
在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading). 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺 ...
- 【知了堂学习笔记】java 方法重载与重写的归纳
方法重载:Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同.调用方法时通过传递给它们的不同个数和类型的参数来决定 ...
- java——方法重载与重写、构造方法、this关键字、static关键字、strictfp关键字、类的导入
Java SE5新增加@Override注解,它并不是关键字,但是可以把它当作关键字使用.当你想要覆写(重写)某个方法时,可以选择添加这个注解,在你不留心重载而并非覆写了该方法时,编译器就会生成一条错 ...
随机推荐
- day02---虚拟机上网模式
修改虚拟网络编辑器 虚拟软件网络模式介绍 NAT网络模式 特点:虚拟主机和宿主机网络信息 可以不一致 优点:不容易出现局域网中IP地址冲突 缺点:其它宿主机不能直接访问虚拟机 桥接网络模式 特点:虚拟 ...
- 【Azure 云服务】Cloud Service Worker Role Workerrole突然停机,查看Events发现 Defrag Error (0x8900002D)
问题描述 Cloud Service Worker Role Workerrole突然停机,查看Events,发现是错误源为 Defrag. 错误消息: The volume Windows was ...
- 【Openxml】如何为OpenXml元素创建超链接
已知在OpenXml有以下几种超链接 功能 说明 跳转页面 跳转某一页:ppaction://hlinksldjump跳转第一页:ppaction://hlinkshowjump?jump=first ...
- 为什么(++a)+(++a)=14
目录 概述 验证 反编译大法 Java 测试 概述 今天有学妹问我,下面这个代码为啥结果是14 int a=5; printf("%d\n",(++a)+(++a)); 我一看,第 ...
- C++ STL 容器-Vector类型
C++ STL 容器-Vector类型 std::vector是C++标准库中的一个动态数组容器,它提供了随机访问迭代器,因此你可以像使用普通数组一样使用vector. vector容器可以动态地增长 ...
- Lazada电商api接口 获取商品详情 数据采集
iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的Lazada电商数据采集API,供用户按需调用. 接口使用详情请参考Lazada接口文档 接 ...
- confluence 破解系列
confluence 破解系列 目录 confluence 破解系列 前言 confluence 一. 安装数据库mysql 二 docker启动confluence 前言 confluence Co ...
- snipaste 替换 微信截图快捷键 F3贴图功能实在是太帅了 - 软件推荐
snipaste 替换 微信截图快捷键 这个软件很久之前就知道,一直也没觉得可以替换微信的截图功能,毕竟能懒就懒. 今天同事又推荐 用了下,觉得确实ok. https://zh.snipaste.co ...
- python tkinter - pickle 持久化
查看当前python版本命令 cmd - python 现在当前版本是 3.8.8 tkinter - tool kits interface
- linux 无法找到“/usr/bin/core_perl/gcc” vscode
解决问题的思路 查看有没有gcc,没有安装 有的话就是,修改安装路径就可以? "/usr/bin/core_perl/gcc".修改成Gcc的绝对路径 我的修改是./usr/bin ...