Day16 -- Java方法详解02
1. 递归
-
递归:A方法调用A方法
-
利用递归可以用简单的程序来解决一些复杂的问题,通常是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
-
递归结构包含两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环;
- 递归体:什么时候需要调用自身方法。
边界条件:边界(返回的条件)
前阶段:
返回阶段:n*f(n-1)
-
Java都是使用栈机制的 递归深度越大,占用内存越多,容易卡
例:阶乘
public static void main(String[] args) {
System.out.println(recursion(5));
}
//2 2*f(1)
//3 3*f(2)
public static int recursion(int n){
if(n == 1){
return 1;
}else{
return n * recursion(n-1);
}
}
2.程序小练习 -- 编写简易计算器
要求:实现一个计算器:
1.写4个方法:加减乘除
2.利用循环+switch进行用户交互
3.传递需要操作的两个数
4.输出结果
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a = 0.0;
double b = 0.0;
double result = 0.0;
String operator = "";
System.out.println("Please input first number:");
if(scanner.hasNextDouble()){
a = scanner.nextDouble();
}
System.out.println("Please input second number:");
if(scanner.hasNextDouble()){
b = scanner.nextDouble();
}
System.out.println("Please input the operator:");
if(scanner.hasNext()){
operator = scanner.next();
}
switch (operator){
case "+":
result = add(a,b);
break;
case "-":
result = minus(a,b);
break;
case "*":
result = multiplication(a,b);
break;
case "/":
if(b == 0){
System.out.println("The divisor cannot be 0!");
return;
}
result = division(a,b);
break;
default:
System.out.println("The operator is not supported!");
break;
}
System.out.println(a + operator + b +" = " + result);
scanner.close();
}
public static double add(double a, double b){
return a + b;
}
public static double minus(double a, double b){
return a - b;
}
public static double multiplication(double a, double b){
return a * b;
}
public static double division(double a, double b){
return a / b;
}
可能有待优化改进的点,欢迎交流。