关于递归详解!!(不会打我)
递归
- 递归就是自己调用自己!
- 递归的意思就是不停的调用自己,但是我们要知道的是我们的计算机资源是有限的,一般来说递归的层数不能太深。
递归主要包含两个部分:递归头和递归体
- 递归头:什么时候不调用自身方法。如果没有,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
举个例子:
我们用阶乘来测试一下递归:
public class Demo06 {
public static void main(String[] args) {
//阶乘 eg:4的阶乘,就是4!=4*3*2*1
System.out.println(j(5));
}
public static int j(int n){
if (n==1){
return 1;
}else {
return n*j(n-1);
}
}
}
解析:可以看出我们是要求一个4的阶乘,下面写了一个方法来求阶乘,方法里面有一个int类型的参数n。当n为4的时候不满足if语句那么就执行else中的语句,返回一个n*f(n-1),也就是4f(3),再把3带入这个方法,就变成4×3×2f(2),,最后当n==1时,满足上面if的条件,返回结果为120
输出:
120
练习:写一个简单的计算器程序
要求:
- 写4个方法:加减乘除
- 利用循环+switch进行用户交互
- 传递需要操作的两个数
- 输出结果
public class Demo07 {
public static void main(String[] args) {
x();
}
public static double x(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入要计算的第一个数:");
double m=sc.nextDouble();
System.out.println("输入要执行的运算符号(+、-、*、/)中的一个");
String k=sc.next();
System.out.println("输入第二个数进行计算:");
double n=sc.nextDouble();
switch (k){
case"+":
System.out.println(plus(m,n));
break;
case "-":
System.out.println(subtract(m,n));
break;
case "*":
System.out.println(multiply(m,n));
break;
case "/":
System.out.println(divide(m,n));
break;
default:
System.out.println("您输入的运算符有误");
}
return 0;
}
//编写四个方法,等
public static double plus(double m,double n){
return m+n;
};
public static double subtract(double m,double n){
return m-n;
};
public static double multiply(double m,double n){
return m*n;
};
public static double divide(double m,double n){
return m/n;
};
}
输入数字进行测试:
请输入要计算的第一个数:
5
输入要执行的运算符号(+、-、*、/)中的一个
/
输入第二个数进行计算:
5
1.0