当前位置: 首页 > news >正文

Java中关于方法的调用和递归

1.方法的调用

2.方法的重载

3.递归


在Java中,相较于C/C++,Java没有函数这一概念,而是用方法,所以可以通俗的讲方法其实也就是函数(个人的理解),所以有C/C++的基础之上,学习方法也就是举一反三的事,也非常的简单,下面我会讲解如何创建方法以及如何调用方法

1.方法的创建

我们已俩个数相加为例子进行展开,我们现在有俩个数分别为a = 10,b = 20,我们要把这俩个数相加也非常的容易,如:

public class Test {public static void main(String[] args) {int a = 10;int b = 20;int c = a + b;System.out.println(c);}
}

这时候我们会想,直接相加就可以了呀,为什么还要创建那么多个方法呢?因为我们当前只是对a和b进行相加而已,如果在以后的开发过程中,如果要对100个不同数俩俩相加,那么我们岂不是要写很多很多个相加的代码,这会让我们的开发效率非常的低,这时候我们可以创建一个俩个数相加的方法,当我们需要对俩个数进行相加的时候,我们可以直接调用方法,一行代码即可搞定,就不需要写冗余的代码!!~~

下面是我们对上面俩个数相加创建的一个方法

public class Test {//这里传的是形参public static int add(int x, int y) {return x + y;    
}public static void main(String[] args) {int c = add(10,20);//这里传的是实参System.out.println(c);c = add(100, 200);System.out.println(c);c = add(13331, 200421);System.out.println(c);}
}

我们通过创建方法,就可以很高效并且不会重复大量的代码进行开发,也就是说方法存在的意义,是为了让我们减少造轮子,高效率的开发,节省时间

那我们又会想到,上面是关于俩个整型int进行相加,那如果我们需要俩个小数进行相加,一个整数和一个小数进行相加....等等,那我们岂不是要写好多个不同方法并且为他们提供不同的名字,这样也很累呀,所以在Java中,为我们提供了关于方法的重载,在C/C++中也有

2.方法的重载

如果我们不使用重载,我们再写开发过程中也很慢,因为我们不仅仅需要给方法起不同的名字,还需要在调用的时候精准调用我们需要的方法,所以如果我们不适用重载的话,即使有方法,也会阻碍我们进步的步伐~~~

下面是不用重载对方法进行创建,我们分别对俩个整型进行相加,一个整型和一个小数进行相加,俩个小数进行相加,这只是我们部分情况。

public class Test {//俩个整型相加public static int addInt(int x, int y) {return x + y;    }//俩个浮点数相加public static double addDouble(double x, double y) {return x + y;}//一个整型和浮点数相加public static double addIntDouble(int x, double y) {return x + y;}//一个浮点数和整型相加public static double addDoubleInt(double x, int y) {return x + y;}public static void main(String[] args) {int c = addInt(10,20);System.out.println(c);double a = addDouble(100.63, 200.231);System.out.println(a);a = addIntDouble(131, 20042.1);System.out.println(a);a = addDoubleInt(131.31, 2004);System.out.println(a);}
}

如果我们需要不同数据类型相加,那我们就要创建非常多的方法,这样子会让我们的代码显得非常的冗余,所以在Java中为我们提供了方法的重载,它可以自动识别参数的个数,参数的数据类型,参数的顺序,自动为我们匹配合适的方法,在调用的过程中也可以为我们节省时间

方法重载的要求:1.方法名称相同 2.参数的数据类型or参数个数or参数顺序不同 3.返回值不影响

下面使用重载,优化上面的代码,在编译的时候,编译器会按照参数自动匹配方法,为我们节省不少的时间和工作,提高开发的效率

public class Test {//俩个整型相加public static int add(int x, int y) {return x + y;    }//俩个浮点数相加public static double add(double x, double y) {return x + y;}//一个整型和浮点数相加public static double add(int x, double y) {return x + y;}//一个浮点数和整型相加public static double add(double x, int y) {return x + y;}//三个整型相加public static int add(int x, int y, int z) {return x + y + z;}public static void main(String[] args) {int c = add(10,20);System.out.println(c);double a = add(100.63, 200.231);System.out.println(a);a = add(131, 20042.1);System.out.println(a);a = add(131.31, 2004);System.out.println(a);c = add(10, 20, 30);System.out.println(c);}
}

3.递归

递归的思想是比较困难的,包括我也写过不少的递归,但是递归的思想还是没有完全建立和熟悉

但是也不要灰心,我个人认为递归要抓住俩个核心:1.递归的出口(结束条件)2.递归的方法

下面我们通过几道递归的题目来感受一下递归

1.使用递归求N的阶乘

1!= 1*1   

2!= 1*2 = 2*(2-1)!

3!= 1*2*3 = 3*(3-1)!

4!= 1*2*3*4= 4*(4-1)!

所以我们可以总结出N!= N*(N-1)

public class Test {public static int fun(int n) {//递归的出口if(n == 1) {return 1;}//递归的思想return n*fun(n-1);}public static void main(String[] args) {int N = 5;int ret = fun(N);System.out.println(ret);} 
}

2.使用递归按顺序打印⼀个数字的每⼀位(例如1234打印出1234)

这道题目是想让我们输入一个整数,如1234,然后打印出来每一位1 2 3 4

那么我们可以使用%和/配合使用得到每一位

public class Test{public static void print(int n) {
//当整数只剩下个位数时候,直接打印 --- 也是递归的出口if(n < 10) {System.out.print(n + "->");}else {print(n/10);System.out.print(n%10 + "->");}}public static void main(String[] args) {int N = 1234;print(N);}}

3.输⼊⼀个⾮负整数,返回组成它的数字之和.例如,输⼊1729,则应该返回1+7+2+9,它的和是19

这道题目和上一道题目一样同理,可以使用%和/配合使用,递归的出口是一样的,可能在思想上会有略不同

public class Test{public static int sum(int n) {
//当n整数为个位数的时候就返回n即可 --- 也是递归的出口if(n < 10) {return n;}else {return (n%10) + sum(n/10);}       }public static void main(String[] args) {int N = 1729;int ret = sum(N);System.out.println(ret);}{

相关文章:

  • 【cursor】有效解决
  • Appium自动化测试环境搭建及配置
  • 西门子1200/1500博图(TIA Portal)寻址方式详解
  • AI 制作游戏美术素材流程分享(程序员方向粗糙版)
  • CCpro工程编程软件
  • Git从入门到精通
  • centos7.9扩展已有分区空间
  • [LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
  • bus hound抓取的数据包各字段含义解释
  • DAY26 函数定义与参数
  • 2025年- H28-Lc136- 24.两两交换链表中的节点(链表)---java版
  • Java开发经验——阿里巴巴编码规范实践解析3
  • 创建指定版本的vite项目
  • 【Retinanet】训练自己的数据集
  • InfluxDB 3 Core + Java 11 + Spring Boot:打造高效物联网数据平台
  • LangChain框架实战:从入门到开发大模型应用
  • Pandas 构建并评价聚类模型② 第六章
  • 红黑树的实现
  • MidJourney生成王昭君全身像提示词
  • 学习是有方法的——费曼学习法
  • 经济日报:政府采购监管篱笆要扎得更牢
  • 官方数据显示:我国心血管疾病患者已超3亿人
  • 香港今年新股集资额已超600亿港元,暂居全球首位
  • 第十届青春文学奖揭晓,梁晓声获特别奖
  • 聚焦中华文明精神标识,多校专家学者跨学科对话交流
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与明代造船工艺间