首页 > 编程语言 >Java--递归

Java--递归

时间:2022-12-27 15:23:13浏览次数:41  
标签:oper Java HashMap 递归 -- double System println out

递归

A方法调用B方法,我们很容易理解!

递归就是:A方法调用A方法!就是自己调用自己

利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两个部分:

  • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。

  • 递归体:什么时候需要调用自身方法。

public static void main(String args[]) {
       //计算阶乘
       //阶乘,如5!,表示从1开始,依次乘到5 即5!=1*2*3*4*5
       //对于任意正整数N,都有N!=1*2*3*...*N
       System.out.println(factorial(5));
  }

   public static int factorial(int n) {
       if (n == 1) {
           return 1;
      }else {
           return n*factorial(n-1);
      }
  }

//输出结果
120

 

 

递归方便程序员,难为了电脑!!!

写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。

思路推荐:

  • 写4个方法:加减乘除

  • 利用循环+switch进行用户交互

  • 传递需要操作的两个数

  • 输出结果

public static void main(String args[]) {
       Scanner scanner = new Scanner(System.in);
       String isNext = "Y";
       while (isNext.equals("Y")) {
           double i1 = 0;
           double i2 = 0;
           double result = 0;
           String oper = null;
           System.out.println("请输入第一个操作数:");
           i1 = scanner.nextDouble();
           System.out.println("请输入运算符:");
           oper = scanner.next();
           System.out.println("请输入第二个操作数:");
           i2 = scanner.nextDouble();
           switch (oper) {
               case "+":
                   System.out.println("您选择"+oper+"运算符:");
                   result = add(i1,i2);
                   System.out.println("结果为"+i1+oper+i2+"="+result);
                   break;
               case "-":
                   System.out.println("您选择"+oper+"运算符:");
                   result = sub(i1,i2);
                   System.out.println("结果为"+i1+oper+i2+"="+result);
                   break;
               case "*":
                   System.out.println("您选择"+oper+"运算符:");
                   result = mul(i1,i2);
                   System.out.println("结果为"+i1+oper+i2+"="+result);
                   break;
               case "/":
                   if (i2==0) {
                       System.out.println("除数不能为0");
                  }else {
                       System.out.println("您选择"+oper+"运算符:");
                       result = div(i1,i2);
                       System.out.println("结果为"+i1+oper+i2+"="+result);
                  }
                   break;
               default:
                   System.out.println("输入运算符错误!");
                   break;
          }
           System.out.println("是否继续计算?(输入Y继续,其他任意键结束):");
           isNext = scanner.next();
      }
       System.out.println("感谢使用本计算器!");
       scanner.close();
  }

   public static double add(double num1,double num2){
       return num1+num2;
  }

   public static double sub(double num1,double num2){
       return num1-num2;
  }

   public static double mul(double num1,double num2){
       return num1*num2;
  }

   public static double div(double num1,double num2){
       return num1/num2;
  }

//输出结果
请输入第一个操作数:
50
请输入运算符:
/
请输入第二个操作数:
0
除数不能为0
是否继续计算?(输入Y继续,其他任意键结束):
Y
请输入第一个操作数:
50.1
请输入运算符:
*
请输入第二个操作数:
2.3
您选择*运算符:
结果为50.1*2.3=115.22999999999999
是否继续计算?(输入Y继续,其他任意键结束):
o
感谢使用本计算器!

Process finished with exit code 0

 

每日Java面试题

一、HashMap和HashTable有什么区别?

  1. HashMap允许key和value为null,而HashTable不允许。

  2. HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。

  3. 在Java1.4中引入了LinkedHashMap,HashMap的一个子类,假如你想要遍历顺序,你很容易从HashMap转向LinkedHashMap,但是HashTable不是这样的,它的顺序是不可预知的。

  4. HashMap提供对key的Set进行遍历,因此它是fail-fast的,但HashTable提供对key的Enumeration进行遍历,它不支持fail-fast。

  5. HashTable被认为是个遗留的类,如果你寻求在迭代的适合修改Map,你应该使用CocurrentHashMap。

二、如何决定使用HashMap还是TreeMap?

对于在Map中插入、删除、定位一个元素这类操作,HashMap是最好的选择,因为相对而言HashMap的插入会更快,但如果你要对一个key集合机型有序的遍历,那TreeMap是更好的选择。

三、说一下HashMap的实现原理?

HashMap基于Hash算法实现的,我们通过put(key,value)存储,gey(key)来获取。当传入key时,HashMap会根据key.hashCode()计算出hash值,根据hash值将value保存在bucket里。当计算出的hash值相同时,我们称之为hash冲突,HashMap的做法是用链表和红黑树存储相同hash值的value。当hash冲突的个数比较少时,使用链表否则使用红黑树。

标签:oper,Java,HashMap,递归,--,double,System,println,out
From: https://www.cnblogs.com/cuijiuba/p/17008145.html

相关文章

  • linux与shell 4.检测系统进程 5.理解shell
    认识shell查看已安装的shell┌──(kali㉿DESKTOP-FQ0BCLS)-[/mnt/e/Edgedownload]└─$cat/etc/shells#/etc/shells:validloginshells/bin/sh/bin/bash/usr/......
  • 模板引擎Jinja资料
    模板引擎Jinja资料说明githubhttps://github.com/pallets/jinja官方网站https://jinja.palletsprojects.com/......
  • 10个中文成语,10种Python初学者常见错误
    哈喽兄弟们,我总结了Python中十种新手常见的错误,每一个都可以用成语来形容,看看各位遇到过多少次了!一、画蛇添足多余的分号Python语言与大多数编程语言不相同,它的......
  • js获取url参数
    <head></head><body></body><scriptsrc="http://code.jquery.com/jquery-1.11.1.min.js"></script><Scriptlanguage="javascript">$(window).load(function(){......
  • vue3传值
    https://blog.csdn.net/H_114/article/details/122420402?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERat......
  • 鸿飞队——桌面开发组 二等奖
    南通大学鸿飞队荣获2022第五届“航天宏图&华为云杯”PIE软件开发者大赛桌面开发组二等奖 作品名称:基于PIE-SDK的多功能集成监测遥感服务平台团队简介:周侗/陶菲(指导......
  • cartographer编译
    1.拷贝catkin_ws,ceres-solver.tar.gz,protobuf.tar.gz到home目录下2.解压ceres-solver.tar.gz到catkin_ws/src目录下,解压protobuf.tar.到home目录下3.sudoapt-getupd......
  • 企业数字化转型迫切,团队协同工具何以成为“杀手锏”?
    不久前,2022世界互联网大会乌镇峰会开幕,360创始人周鸿祎以“构建SaaS生态,助力数字化共同富裕”为主题发表分论坛演讲,并宣布360集团正式上线SaaS商店,为中小微企业和实体产业......
  • CentOS设置双网卡
    一.为什么要设置双网卡目的:无论连接的网络如何变化,可以保证有一个固定的IP访问虚拟机  二、设置双网卡步骤1.首先是安装好一个centOS虚拟机,这里我用的镜像版本是镜......
  • ios 逆向 随笔
    使用爱思助手打开ssh通道登入ssh-p2222root@localhostalpine注:如无法连接,可直接删除.ssh目录user/用户/.ssh(rm-rf.ssh)使用frida-ios-dump-master目录中的dump.py脚......