递归 通俗来讲递归就是自己调用自己,例如:方法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相关推荐

  1. java全栈系列之JavaSE--Arrays类详解027

    数组工具类java.util.Arrays Arrays类的常用功能: 给数组赋值,通过fill方法 对数组进行排序,通过sort方法 比较数组,通过equals方法比较两数组的元素值是否相等 查找数 ...

  2. java全栈系列之JavaSE--冒泡排序028

    冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...

  3. Java全栈系列笔记

    Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...

  4. Python全栈开发-数据分析-03 Pandas详解 (中)

    Pandas详解 (中) 一. 处理缺失值 1.1 drop函数:删除行,删除列 1.删除某列或某行数据可以用到pandas提供的方法drop 2.drop方法的用法: drop(labels, ax ...

  5. Python全栈开发-数据分析-02 Pandas详解 (上)

    Pandas详解 (上) 一. 安装pandas 1.按Win+R,输入CMD确定, 输入 pip install pandas 回车 还要安装xlrd,否则你打不开Excel文件 pip insta ...

  6. Python全栈开发-数据分析-03 Pandas详解 (下)

    Pandas详解 (下) 一. Excel文件的拆分与合并 1.1 一个文件夹下多个工作簿的合并[单独Sheet] 思路: 1,把文件夹下面所有的文件都遍历出来 2.循环读取每个文件 (1)第一次读取 ...

  7. java全栈系列之JavaSE-面向对象(继承详解)035

    类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...

  8. java全栈系列之JavaSE-面向对象(封装详解)034

    封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...

  9. java全栈系列之JavaSE-面向对象(异常详解)043

    Exception可以被程序处理的异常 异常指的是程序在运行中出现了无法预料的状况,异常发生在程序运行期间.程序中可以选择捕获异常,也可以不处理使用默认的异常 算术异常 通常是由于算术计算错误导致的 ...

最新文章

  1. 除了 AI,这些技术为 IIoT 插上飞向“4.0”的翅膀
  2. NodeJS文档之Buffer(1)-Buffer的简介
  3. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法
  4. Windows负载机JVM 远程监控Linux服务器下tomcat
  5. java获取u盘_实例分享java监听u盘的方法
  6. 线上流量越发昂贵,如何通过裂变营销实现业务增长?
  7. Oracle数据库中表格的级联删除问题
  8. 使用PostgREST的RestAPI操作之角色系统教程
  9. spring图片转视频_视频转GIF在线教程,GIF制作方法
  10. PAT 乙级 1009. 说反话 (20) Java版
  11. Win10电脑如何找出隐藏的文件
  12. [Flex]Flex编程注意之自动获取焦点、监听全局键盘事件
  13. Android给ListView添加侧滑菜单功能
  14. linux PMBus总线及设备驱动分析
  15. PicGo简介及其下载 安装 配置 使用 卸载
  16. 医学统计学笔记之分布
  17. fzyzojP3580 -- [校内训练-互测20180315]小基的高智商测试
  18. Java实现 蓝桥杯 历届试题 带分数
  19. Hibernate4.3.1搭建Log4J日志环境
  20. 防封策略(适用所有游戏)

热门文章

  1. bga封装扇出过孔_Altium Designer BGA扇出
  2. Unity 中实现截图画笔橡皮擦工具
  3. C51数字钟程序-ZT(拿来学习用)
  4. 2021第七届美亚杯中国电子数据取证大赛详解write up
  5. rt-thread+SAL+W5500 以太网Socket通信
  6. 工业视觉需要时可抄的代码---持续更新
  7. vue-trtc多人视频开发(从零开始)-有手就行篇-最详细讲解
  8. Wi-Fi 网络结构
  9. 图神经网络12-分子指纹GCN:Neural FPs
  10. php 顿号转义,PHP实现将标点符号正则替换为空格的方法