Java的递归

递归

  • 递归就是A方法调用自己。
  • 递归可以把大型复杂的问题层层转化为同原问题相似的规模较小的问题来求解,仅需少量的程序就可描述出解题过程所需要的多次重复运算。
  • 递归如果调用太多,会栈溢出,因此只能用于部分场景。
  • 递归结构的两个部分:
    • 递归头:什么时候不调用自身方法,如果无头,进入死循环。
    • 递归体,什么时候调用自身方法。

死循环实例:

public class Test3 {
    public static void main(String[] args) {
        Test3 test3 = new Test3();
        test3.test();
    }
    public void test(){
        test();                     //会导致栈溢出,内存不足。
    }
}

实例之阶乘计算器:

import java.util.Scanner;
public class Test4 {
    //5!== 5x4x3x2x1  阶乘,及一个数从自身乘到1
    public static void main(String[] args) {
        while (true){
            System.out.println("请输入需要计算阶乘的数字:");
            Scanner scanner = new Scanner(System.in);
            if (scanner.hasNextLong()){
                long n = scanner.nextLong();
                if (n > 0){
                    System.out.println(n+"的阶乘为:"+f(n));
                    scanner.close();
                    break;
                }
                else {
                    System.out.println("请输入大于0的正数!");
                }
            }
            else {
                System.out.println("请输入数字或正整数!");
            }
        }
    }
    public static long f(long n){
        if (n == 1) {
            return 1;
        }
        else {
            return n*f(n-1);
            /*
            此处意思为若n赋给的值不等于1,那么返回方法最上面,
            重新调用自身,并用n乘以被赋值n=(n-1)后的方法执行结果,
            直至执行到if为true,返回1同前面每次执行出来的数相乘,
            便成为一个计算阶乘的算法。
             */
        }
    }
}

简易计算器实例:

import java.util.Scanner;
public class Calculate {
    public static void main(String[] args) {
        System.out.println("===      计算器      ===");
        System.out.println("===   1.加法计算     ===");
        System.out.println("===   2.减法计算     ===");
        System.out.println("===   3.乘法计算     ===");
        System.out.println("===   4.除法计算     ===");
        System.out.println("======================");
        while (true){
            System.out.println("请输入需要的计算方式:");
            Scanner scanner = new Scanner(System.in);
            if (scanner.hasNextInt()){
                int cal = scanner.nextInt();
                switch (cal){
                    case 1 :
                        System.out.println("请输入第一个数:");
                        double a= scanner.nextDouble();
                        System.out.println("请输入第二个数");
                        double b= scanner.nextDouble();
                        System.out.println("结果是"+add(a,b));
                        scanner.close();
                        break;
                    case 2:
                        System.out.println("请输入第一个数:");
                        a= scanner.nextDouble();
                        System.out.println("请输入第二个数");
                        b= scanner.nextDouble();
                        System.out.println("结果是"+sub(a,b));
                        scanner.close();
                        break;
                    case 3:
                        System.out.println("请输入第一个数:");
                        a= scanner.nextDouble();
                        System.out.println("请输入第二个数");
                        b= scanner.nextDouble();
                        System.out.println("结果是"+cheng(a,b));
                        scanner.close();
                        break;
                    case 4:
                        System.out.println("请输入第一个数:");
                        a= scanner.nextDouble();
                        System.out.println("请输入第二个数");
                        b= scanner.nextDouble();
                        System.out.println("结果是"+chu(a,b));
                        scanner.close();
                        break;
                }
                break;
            }
            else {
                System.out.println("请选择正确的计算方式!");
            }
        }
    }
    public static double add(double a,double b){
        return a+b;
        }
        public static double sub(double a,double b){
        return a-b;
    }
    public  static  double cheng(double a,double b){
        return a*b;
    }
    public  static double chu(double a,double b){
        return a/b;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值