java全栈系列之JavaSE--递归详解022
递归 通俗来讲递归就是自己调用自己,例如:方法A调用方法A,递归可以大大减少程序的代码量,递归调用次数过多会严重影响机器的性能
如下,我定义了一个方法名字叫demo,在demo方法里面自己调用自己
public static void demo(){demo();
}
运行直接报错:
at Demo014.demo(Demo014.java:6)
at Demo014.demo(Demo014.java:6)
at Demo014.demo(Demo014.java:6)
如上方法并不为递归
递归包含两个部分:
- 递归头:什么时候不调用自身方法,如果没有头将陷入死循环,
- 递归体:什么时候需要调用自身方法
阶乘案例:
1!的阶乘是1,
5!的阶乘是5X4X3X2X1
public class Demo014 {public static void main(String[] args) {int d =demo(5);System.out.println(d);}public static int demo(int sum){if (sum==1){ //1的阶乘是1,输入1则返回值为1return 1;}else {return sum*demo(sum-1);//sum的值为5,则输入非1的数进行判断//第一次调用5*(5-1) = 5*4 ,只要不等于1,则继续调用,4*3....,只要等于1则返回1}}
}
案例:写一个计算器,要求实现加减乘除功能,并且能够循环接受新的数据,通过用户交互实现
方法1思路: 定义4个方法加减乘除,在main方法里面获取用户的输入,并使用switch来判断用户输入的运算符,例如:如果用户输入的是"+"加法运算符,则只调用加法的方法并传入用户输入数字进行传参,计算完毕后输出结果
1.写4个加减乘除的方法。
public int jia(int one,int two){ //定义加法方法,定义形式参数return one+two; //返回值为one加two}public int jian(int one,int two){ //定义减法方法,定义形式参数return one-two; //返回值为one减two}public int cheng(int one,int two){ //定义乘法方法,定义形式参数return one*two; //返回值为one乘two}public int chu(int one,int two){ //定义除法方法,定义形式参数return one/two; //返回值为one除two}
2.获取用户的输入并判断用户输入的运算符
public static void main(String[] args) {Scanner S=new Scanner(System.in); //创建Scanner实例对象来获取用户的输入Demo013 D=new Demo013();//创建类实例对象,用来进行实例方法的调用System.out.print("请输入第一个数:");//提示用户输入第一个数字int sum1= S.nextInt();//将第一个数字定义变量为sum1,指定类型为intSystem.out.print("请输入第二个数:");//提示用户输入第二个数字int sum2= S.nextInt();//将第一个数字定义变量为sum2,指定类型为intSystem.out.print("请输入算术运算符:");//提示用户输入运算符String s=S.next();//定义变量s,指定运算符的类型为Stringswitch (s){ //使用switch分支判断,判断条件为s//switch判断条件可以为一个变量或某个值case "+": //如果用户输入的运算符为加号int jia=D.jia(sum1,sum2); //调用jia方法并传入变量参数sum1和sum2System.out.println(jia);//输出结果break; //switch中的break为跳出判断终止case "-": //如果用户输入的运算符为减号int jian=D.jian(sum1,sum2);//调用jian方法并传入变量参数sum1和sum2System.out.println(jian);//输出结果break;case "*":int cheng=D.cheng(sum1,sum2);System.out.println(cheng);break;case "/":int chu = D.chu(sum1,sum2);System.out.println(chu);default: //若是输入其他不符合规定的字符System.out.println("请输入有效的算术运算符!!!");//则提示用户输入有效的字符}}
执行结果:
请输入第一个数:78
请输入第二个数:63
请输入算术运算符:*
4914
方法2思路: 定义4个方法分别是加减乘除并定义形式参数,使用Scanner方法获取用户输入,在调用加减乘除方法的时候进行传入实际参数。并提示用户输入数字,调用方法输出结果。
package Java_Demo01;
import java.util.Scanner;
public class Demo012 {public static void main(String[] args) {Demo012 D=new Demo012();System.out.print("请输入第一个数:");Scanner S=new Scanner(System.in);int one=S.nextInt();System.out.print("请输入第二个数:");int two=S.nextInt();int jia =D.jia(one,two); //定义jia变量并调用jia方法传入实际变量参数int jian=D.jian(one,two);//定义jian变量并调用jian方法传入实际变量参数int cheng=D.cheng(one,two);//定义cheng变量并调用cheng方法传入实际变量参数int chu=D.chu(one,two);//定义chu变量并调用chu方法传入实际变量参数System.out.println("两数相加的结果是:"+jia);//输出结果System.out.println("两数相减的结果是:"+jian);System.out.println("两数相减的结果是:"+ cheng);System.out.println("两数相减的结果是:"+chu);}public int jia(int a,int b){return a+b;}public int jian(int a,int b){return a-b;}public int cheng(int a,int b){return a*b;}public int chu(int a,int b){return a/b;}
}
执行结果:
请输入第一个数:10
请输入第二个数:28
两数相加的结果是:38
两数相减的结果是:-18
两数相减的结果是:280
两数相减的结果是:0
java全栈系列之JavaSE--递归详解022相关推荐
- java全栈系列之JavaSE--Arrays类详解027
数组工具类java.util.Arrays Arrays类的常用功能: 给数组赋值,通过fill方法 对数组进行排序,通过sort方法 比较数组,通过equals方法比较两数组的元素值是否相等 查找数 ...
- java全栈系列之JavaSE--冒泡排序028
冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...
- Java全栈系列笔记
Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...
- Python全栈开发-数据分析-03 Pandas详解 (中)
Pandas详解 (中) 一. 处理缺失值 1.1 drop函数:删除行,删除列 1.删除某列或某行数据可以用到pandas提供的方法drop 2.drop方法的用法: drop(labels, ax ...
- Python全栈开发-数据分析-02 Pandas详解 (上)
Pandas详解 (上) 一. 安装pandas 1.按Win+R,输入CMD确定, 输入 pip install pandas 回车 还要安装xlrd,否则你打不开Excel文件 pip insta ...
- Python全栈开发-数据分析-03 Pandas详解 (下)
Pandas详解 (下) 一. Excel文件的拆分与合并 1.1 一个文件夹下多个工作簿的合并[单独Sheet] 思路: 1,把文件夹下面所有的文件都遍历出来 2.循环读取每个文件 (1)第一次读取 ...
- java全栈系列之JavaSE-面向对象(继承详解)035
类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...
- java全栈系列之JavaSE-面向对象(封装详解)034
封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...
- java全栈系列之JavaSE-面向对象(异常详解)043
Exception可以被程序处理的异常 异常指的是程序在运行中出现了无法预料的状况,异常发生在程序运行期间.程序中可以选择捕获异常,也可以不处理使用默认的异常 算术异常 通常是由于算术计算错误导致的 ...
最新文章
- 除了 AI,这些技术为 IIoT 插上飞向“4.0”的翅膀
- NodeJS文档之Buffer(1)-Buffer的简介
- 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法
- Windows负载机JVM 远程监控Linux服务器下tomcat
- java获取u盘_实例分享java监听u盘的方法
- 线上流量越发昂贵,如何通过裂变营销实现业务增长?
- Oracle数据库中表格的级联删除问题
- 使用PostgREST的RestAPI操作之角色系统教程
- spring图片转视频_视频转GIF在线教程,GIF制作方法
- PAT 乙级 1009. 说反话 (20) Java版
- Win10电脑如何找出隐藏的文件
- [Flex]Flex编程注意之自动获取焦点、监听全局键盘事件
- Android给ListView添加侧滑菜单功能
- linux PMBus总线及设备驱动分析
- PicGo简介及其下载 安装 配置 使用 卸载
- 医学统计学笔记之分布
- fzyzojP3580 -- [校内训练-互测20180315]小基的高智商测试
- Java实现 蓝桥杯 历届试题 带分数
- Hibernate4.3.1搭建Log4J日志环境
- 防封策略(适用所有游戏)