为了做出springboot前后端分离的科研项目管理系统努力学习10

递归

递归就是自己调用自己。

通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,只需用少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少代码量。

递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两部分:

  • 递归头:什么时候不调用自己。也就是出口。没有出口就会陷入死循环。
  • 递归体:什么时候要调用自己。

 

package com.study.method;

import java.util.Scanner;

public class Demo05 {
    //递归求阶乘 n!=n*(n-1)*...*2*1
    public static void main(String[] args) {
        System.out.println("请输入:");
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        System.out.println(f(i));
        scanner.close();
    }

    public static int f(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * f(n - 1);
        }
    }
}

 

java是栈机制,最底层是main方法,每调用一个方法都会往上压一层。

方法结束就会消失,程序执行完毕就会栈里面就会变空。

对于嵌套层次比较深的程序,机器就会力不从心。

调用方法次数太多了,会影响机器性能。能不用尽量不用。主要是学习递归的思想。

 


作业

计算器:实现加减乘除功能,并且能够循环接收新的数据,通过用户交互Scanner实现。

思路:

  • 写四个方法:加减乘除
  • 循环+Switch进行用户交互
  • 传递需要操作的两个数
  • 输出结果

过程中遇到一个问题:

不知道字符型数据该如何用scanner接收?

char sex=scanner.next().charAt(0);


package com.study.method;

import java.util.Scanner;

public class Demo06 {
    /*
        计算器:实现加减乘除功能,并且能够循环接收新的数据,通过用户交互Scanner实现。

        思路:
        写四个方法:加减乘除
        循环+Switch进行用户交互
        传递需要操作的两个数
        输出结果
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个操作数:");

        while (scanner.hasNextDouble()){
            int a= scanner.nextInt();
            if (a==999){
                System.out.println("程序结束!");
                break;
            }
            System.out.println("请输入操作符(+  -  *  /):");
            char m=scanner.next().charAt(0);

            System.out.println("请输入第二个操作数:");
            int b= scanner.nextInt();

            System.out.println("结果为:");
            switch (m) {
                case '+':
                    System.out.println(add(a, b));
                    break;
                case '-':
                    System.out.println(sub(a, b));
                    break;
                case '*':
                    System.out.println(mul(a, b));
                    break;
                case '/':
                    System.out.println(rem(a, b));
                    break;
                default:
                    break;
            }
            System.out.println("请继续输入第一个操作数(输入999退出):");
        }

        scanner.close();
    }

    // 加
    public static final int add(int a,int b){
        return a+b;
    }
    // 减
    public static final int sub(int a,int b){
        return a-b;
    }
    // 乘
    public static final int mul(int a,int b){
        return a*b;
    }
    // 除
    public static final double rem(int a,int b){
        return a/(double)b;
    }
}

 功能实现!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liangjuhan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值