Java学习 8.方法习题

news2024/12/23 18:18:37

1.递归求 N 的阶乘的和

思路

循环递归先从1到N相乘,求出每一项的阶乘,在定义变量将它们相加

代码实现

    public static int rec(int N){
        int i=1;
        int sum=0;
        int num=1;
        for(i=1;i<=N;i++){
            num*=i;
            sum+=num;
        }
        return sum;
    }

运行结果

2.递归求和

求1+2+...+10

思路

循环递归将每一项相加

代码实现

    public static int jSum(int a){
        int sum=0;
        for(int i=1;i<=a;i++)
        {
            sum+=i;
        }
        return sum;
    }

运行结果

3.递归返回数字之和

思路

n%10得到最后一位数字,n/10将最后一位省略,在定义变量sum将每次的最后一位数字相加,求和

代码实现

    public static int num(int n){
        int sum=0;
        while(n!=0){
            sum+=n%10;
            n=n/10;
        }
        return sum;
    }

运行结果

4.递归求斐波那契数列的第 N 项

思路

斐波那契数列指:1 1 2 3 5 8 ...前两项为1,从第三项开始值为前两项的和,输入所求的项数,输出第N项

代码实现

    public static int Fib(int n){
        if(n==1||n==2){
            return 1;
        }else{
            return Fib(n-1)+Fib(n-2);
        }
    }

运行结果

5.递归求解汉诺塔问题

思路

汉诺塔问题指:1.有三根杆子A,B,C。A杆上有若干碟子

                         2.每次移动一块碟子,小的只能叠在大的上面.把所有碟子从A杆全部移到C杆上

需要通过一个第三个盘子作为中间过渡,将盘子由大致小最终排列好

代码实现

    //5.递归求解汉诺塔问题
        /**
         * 传入n个盘子,编号从1..n,我就能按照汉诺塔的规则,从目标盘子A -> C ,B是辅助盘
         * @param nDisks
         * @param A 起始柱子
         * @param B 辅助柱子
         * @param C 目标柱子
         */
        public static void hanoiTower(int nDisks,char A,char B,char C) {
            // 边界
            if (nDisks == 1) {
                // 直接一步到位,用不到B,A上的这一个盘子从A -> C
                move(nDisks,A,C);
                return;
            }
            // n >= 2,核心步骤1,先把顶上的 n -1个小盘子从A -> B,C作为辅助
            hanoiTower(nDisks - 1,A,C,B);
            // 核心步骤2.此时A上就剩下第n个盘子,一步到位将最大的这个盘子一次移动到C
            move(nDisks,A,C);
            // 核心步骤3.此时再把B上的这n-1个盘子从B -> C,A作为辅助
            hanoiTower(nDisks - 1,B,A,C);
        }

        /**
         * 将编号为n的盘子从sourceTower移动到destTower
         * @param nDisks
         * @param sourceTower
         * @param destTower
         */
        public static void move(int nDisks, char sourceTower, char destTower) {
            System.out.println("编号为"+nDisks+"的盘子正在从"+sourceTower+"->"+destTower);
        }

运行结果

main函数调用

    public static void main(String[] args) {
        System.out.println("请你们输入求斐波那契数列第几项");
        Scanner sc1=new Scanner(System.in);
        int sum2= sc1.nextInt();
        int num2=Fib(sum2);
        System.out.println(num2);

        int N;
        System.out.println("请您输入一个数N");
        Scanner sc=new Scanner(System.in);
        N=sc.nextInt();
        int sum=rec(N);
        System.out.println(sum);

        int a=10;
        int b=jSum(a);
        System.out.println(b);

        System.out.println("请您输入一个数num");
        int num1= sc.nextInt();
        int sum1=num(num1);
        System.out.println(sum1);

        System.out.println("请您输入你想求解汉诺塔问题的层数");
        int n=sc.nextInt();
        hanoiTower(n,'A','B','C');
    }
}

整体代码

import java.util.Scanner;

public class day_8 {

    //1.递归求 N 的阶乘
    public static int rec(int N){
        int i=1;
        int sum=0;
        int num=1;
        for(i=1;i<=N;i++){
            num*=i;
            sum+=num;
        }
        return sum;
    }

    //2.递归求和
    public static int jSum(int a){
        int sum=0;
        for(int i=1;i<=a;i++)
        {
            sum+=i;
        }
        return sum;
    }

    //3.递归返回数字之和
    public static int num(int n){
        int sum=0;
        while(n!=0){
            sum+=n%10;
            n=n/10;
        }
        return sum;
    }

    //4.递归求斐波那契数列的第 N 项
    public static int Fib(int n){
        if(n==1||n==2){
            return 1;
        }else{
            return Fib(n-1)+Fib(n-2);
        }
    }

    //5.递归求解汉诺塔问题
        /**
         * 传入n个盘子,编号从1..n,我就能按照汉诺塔的规则,从目标盘子A -> C ,B是辅助盘
         * @param nDisks
         * @param A 起始柱子
         * @param B 辅助柱子
         * @param C 目标柱子
         */
        public static void hanoiTower(int nDisks,char A,char B,char C) {
            // 边界
            if (nDisks == 1) {
                // 直接一步到位,用不到B,A上的这一个盘子从A -> C
                move(nDisks,A,C);
                return;
            }
            // n >= 2,核心步骤1,先把顶上的 n -1个小盘子从A -> B,C作为辅助
            hanoiTower(nDisks - 1,A,C,B);
            // 核心步骤2.此时A上就剩下第n个盘子,一步到位将最大的这个盘子一次移动到C
            move(nDisks,A,C);
            // 核心步骤3.此时再把B上的这n-1个盘子从B -> C,A作为辅助
            hanoiTower(nDisks - 1,B,A,C);
        }

        /**
         * 将编号为n的盘子从sourceTower移动到destTower
         * @param nDisks
         * @param sourceTower
         * @param destTower
         */
        public static void move(int nDisks, char sourceTower, char destTower) {
            System.out.println("编号为"+nDisks+"的盘子正在从"+sourceTower+"->"+destTower);
        }

    public static void main(String[] args) {
        System.out.println("请你们输入求斐波那契数列第几项");
        Scanner sc1=new Scanner(System.in);
        int sum2= sc1.nextInt();
        int num2=Fib(sum2);
        System.out.println(num2);

        int N;
        System.out.println("请您输入一个数N");
        Scanner sc=new Scanner(System.in);
        N=sc.nextInt();
        int sum=rec(N);
        System.out.println(sum);

        int a=10;
        int b=jSum(a);
        System.out.println(b);

        System.out.println("请您输入一个数num");
        int num1= sc.nextInt();
        int sum1=num(num1);
        System.out.println(sum1);

        System.out.println("请您输入你想求解汉诺塔问题的层数");
        int n=sc.nextInt();
        hanoiTower(n,'A','B','C');
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react项目入门,创建项目

react项目入门&#xff0c;创建项目 // react-ts项目入门&#xff0c;创建项目 // https://juejin.cn/post/6844904184597184519第零步&#xff0c;检查版本 node -v npm -v 1a69c3036bc3aea6d29d2b66fe46602f.jpg 第一步&#xff0c;新建个文件夹&#xff0c;不能中午命名&a…

AI时代:ChatGPT让程序员插上翅膀

程序员开发新模式&#xff1a;一本专注于帮助程序员在AI时代实现晋级、提高效率的图书。书中介绍了如何使用 ChatGPT 来完成高质量代码编写、文档编写、软件设计等各个环节&#xff0c;并通过实战案例展示了 ChatGPT在实际项目开发中的应用方法。 1.开发新模式&#xff1a;让程…

Linux安装pinpoint监控保姆级安装攻略没有之一

Linux安装pinpoint监控&#xff0c;保姆级安装攻略&#xff0c;没有之一 pinpoint介绍 Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具&#xff0c;用于基于java的大规模分布式系统&#xff0c;基于Google Dapper论文。 架构组成 Pinpoin…

Flask Shell 操作 SQLite

一、前言 这段时间在玩Flask Web&#xff0c;发现用Flask Shell去操作SQLite还是比较方便的。今天简单地介绍一下。 二、SQLite SQLite是一种嵌入式数据库&#xff0c;它的数据库就是一个文件&#xff0c;处理速度快&#xff0c;经常被集成在各种应用程序中&#xff0c;在IO…

5分钟搞定深度学习中间特征可视化

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 今天跟大家分享一个可视化CNN/ViT中间特征的库&#xff1a;pytorch-grad-cam 下载地址&#xff1a;https://github.com/jacobgil/pytorch-grad-cam pytorch-grad-cam支持多种可视化方法&#…

接口测试之jmeter基本归结

一、接口测试 二、jmeter脚本开发 三、Jmeter参数化技术

云帆培训考试系统更新说明:v6.9.0

1、增加群组功能 -- 增加群组功能&#xff0c;一个用户可以存在于多个小组中&#xff1b; -- 在线考试、课程学习、活动报名、题库训练、知识竞赛增加群组权限设置&#xff1b; 2、增加线下考试功能 -- 增加线下考试功能&#xff0c;可批量导入线下成绩&#xff0c;管理线下…

Spring Web MVC练习

一&#xff1a;开发程序常见问题 (1)学会定位前后端问题 &#x1f497;通过看日志&#xff0c;查看到底是前端问题还是后端问题 ①前端&#xff1a;F12查看网页的控制台 ②后端&#xff1a;测试后端接口参数&#xff1b;查看IDEA的控制台 (测试后端接口参数&#xff0c;即去访…

java中包的概念

内容仅供复习 java中包是把一些类进行打包&#xff0c;在一个包中所有public的类可以直接使用。如果在别的包中要使用一个类就必须import这个包。friendly类型的方法在同个包中可以使用&#xff0c;在不同包里面不可以访问这个类型的方法。 创建一个java项目&#xff0c;在src…

【Http协议】 二

实际开发中&#xff0c;经常需要能够手动的构造出Http协议的请求 一般是通过以下几种方式&#xff1a; 1.通过html中的form表单 2.通过js的ajax 3.Java代码&#xff08;其他各种语言&#xff09; 4.借助一些第三方工具 1.通过html的form标签/表单构造http请求 >对于编写html…

SpringBoot通过注解形式实现系统操作日志

介绍 我们在日常开发工作中&#xff0c;肯定逃不开与日志接触&#xff0c;一些比较严谨的后台管理系统里面会涉及到一些比较重要的资料&#xff0c;有些公司为了知道有哪些人登录了系统&#xff0c;是谁在什么时候修改了用户信息或者资料&#xff0c;所以就有了操作日志这么个…

MySQL 基础学习笔记(一)

目录 1 SQL简介2 MySQL基本语法2.1 语法规则2.2 数据类型 3 DDL3.1 操作数据库3.2 操作表 4 DML4.1 添加数据4.2 修改数据4.3 删除数据 5 DQL5.1 基础查询5.2 条件查询5.3 排序查询5.4 聚合查询5.5 分组查询5.6 分页查询 1 SQL简介 SQL &#xff1a;Structured Query Language&…

基于 MySQL 多通道主主复制的机房容灾方案

文章中介绍了多种 MySQL 高可用技术&#xff0c;并介绍了根据自身需求选择多通道主主复制技术的过程和注意事项。 作者&#xff1a;徐良&#xff0c;现任中国移动智慧家庭运营中心数据库高级经理&#xff0c;多年数据库运维优化经验&#xff0c;历任华为、一线互联网公司高级 D…

使用Nokogiri和OpenURI库进行HTTP爬虫

目录 一、Nokogiri库 二、OpenURI库 三、结合Nokogiri和OpenURI进行爬虫编程 四、高级爬虫编程 1、并发爬取 2、错误处理和异常处理 3、深度爬取 总结 在当今的数字化时代&#xff0c;网络爬虫已经成为收集和处理大量信息的重要工具。其中&#xff0c;Nokogiri和OpenUR…

softmax的高效CUDA编程和oneflow实现初步解析

本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…

Javascript基础-BOM

文章目录 BOM——Browser Object Model定时器--延时函数 JS执行机制具体流程 三个常见对象location对象navigator对象history对象 本地存储介绍sessionStoragesessionStorage 存储复杂数据类型字符串拼接 正则表达式元字符 BOM——Browser Object Model 浏览器对象模型&#x…

【LeetCode:26. 删除有序数组中的重复项 | 双指针】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

怎么从外面远程访问服务器设备?

怎么从外面远程访问服务器设备&#xff1f; “我家里有一台服务器设备&#xff0c;当我在学校时需要远程访问家里的服务器。请问是否可以从外网远程访问家里的服务器设备&#xff0c;有什么方法可以实现吗&#xff1f;” 远程访问服务器设备&#xff0c;一种典型…

20量子比特!芬兰成功研发第二台量子计算机

&#xff08;图片来源&#xff1a;网络&#xff09; 近期&#xff0c;芬兰国家技术研究中心&#xff08;VTT&#xff09;宣布&#xff0c;已顺利研发芬兰第二台量子计算机&#xff0c;该计算机具有20个超导量子比特&#xff0c;由芬兰国家技术研究中心&#xff08;VTT&#xf…

java如何获取调用接口的ip?

获取调用者的ip 场景&#xff1a;想知道哪个ip访问的某个接口时&#xff0c;就需要打印出来看看&#xff0c;这时就可以使用这个方法了。 案例&#xff1a; //HttpServletRequest 入参加上,请求对象public ForkResponse queryXXX(RequestBody XXXX xxxx, HttpServletRequest …