关于递归详解!!(不会打我)

关于递归详解!!(不会打我)

递归

  • 递归就是自己调用自己!
  • 递归的意思就是不停的调用自己,但是我们要知道的是我们的计算机资源是有限的,一般来说递归的层数不能太深。

递归主要包含两个部分:递归头和递归体

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

举个例子:

我们用阶乘来测试一下递归:

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

练习:写一个简单的计算器程序

要求:

  1. 写4个方法:加减乘除
  2. 利用循环+switch进行用户交互
  3. 传递需要操作的两个数
  4. 输出结果
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
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 关于递归详解!!(不会打我)