递归——以阶乘为例、附加计算器小练习

递归

  • A方法调用B方法,我们很容易理解!
  • 递归就是:A方法调用A方法!就是自己调用自己
  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型的复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
  • 递归结构包括两个部分:
    1. 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
    2. 递归体:什么时候需要调用自身方法。
package com.jacyzhu.method;

public class Demo05 {

    public static void main(String[] args) {
        System.out.println(f(5));
    }

    // 1!  1
    // 2!  2*1
    // 5!  5*4*3*2*1

    // 2 2*f(1)
    // 3 3*f(2) 3*2*f(1)
    public static int f(int n) {
        if (n==1) {
            return 1;
        }else {
            return n*f(n-1);
        }
    }
}
运行结果:
120

递归——以阶乘为例、附加计算器小练习_第1张图片

边界条件:边界
前阶段:
返回阶段:n*(n-1)
写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。
思路推荐:
 写4个方法:加减乘除
 利用循环+switch进行用户交互
 传递需要操作的两个数
 输出结果
package com.jacyzhu.method;

import java.util.Scanner;

public class Demo06 {
    public static void main(String[] args) {
        /*
        写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。
        思路推荐:
        写4个方法:加减乘除
        利用循环+switch进行用户交互
        传递需要操作的两个数
        输出结果
         */

        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请选择加减乘除运算:加法运算输入1,减法运算输入2,乘法运算输入3,除法运算输入4");
            int choice = scanner.nextInt();
            System.out.println("请输入第一个数a:");
            double a = scanner.nextDouble();

            System.out.println("请输入第二个数b:");
            double b = scanner.nextDouble();
            switch (choice) {
                case 1:
                    double add_result = add(a, b);
                    System.out.println(a+ "+" + b + "=" + add_result);
                    break;
                case 2:
                    double sub_result = sub(a, b);
                    System.out.println(a+ "-" + b + "=" + sub_result);
                    break;
                case 3:
                    double mul_result = mul(a, b);
                    System.out.println(a+ "*" + b + "=" + mul_result);
                    break;
                case 4:
                    double div_result = div(a, b);
                    System.out.println(a+ "/" + b + "=" + div_result);
                    break;
                default:
                    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 mul(double a, double b){
        return a * b;
    }
    public static double div(double a, double b){
        return a / b;
    }
}
运行结果:
请选择加减乘除运算:加法运算输入1,减法运算输入2,乘法运算输入3,除法运算输入4
1
请输入第一个数a:
12
请输入第二个数b:
8
12.0+8.0=20.0
请选择加减乘除运算:加法运算输入1,减法运算输入2,乘法运算输入3,除法运算输入4
2
请输入第一个数a:
35
请输入第二个数b:
18
35.0-18.0=17.0
请选择加减乘除运算:加法运算输入1,减法运算输入2,乘法运算输入3,除法运算输入4
3
请输入第一个数a:
20
请输入第二个数b:
3
20.0*3.0=60.0
请选择加减乘除运算:加法运算输入1,减法运算输入2,乘法运算输入3,除法运算输入4
4
请输入第一个数a:
35
请输入第二个数b:
7
35.0/7.0=5.0
请选择加减乘除运算:加法运算输入1,减法运算输入2,乘法运算输入3,除法运算输入4

你可能感兴趣的:(java,算法,c++)