递归
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有什么区别?
-
HashMap允许key和value为null,而HashTable不允许。
-
HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。
-
在Java1.4中引入了LinkedHashMap,HashMap的一个子类,假如你想要遍历顺序,你很容易从HashMap转向LinkedHashMap,但是HashTable不是这样的,它的顺序是不可预知的。
-
HashMap提供对key的Set进行遍历,因此它是fail-fast的,但HashTable提供对key的Enumeration进行遍历,它不支持fail-fast。
-
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