递归算法常见问题(Java)

问题:斐波那契数列,第1项和第2项都为1,后面每一项都为相邻的前俩项的和,求第n个数

解法:每一个数都为前俩个数之和,第1项和第2项都为1,所以写 方法f1(n)即为求第n个数,那么f1(n-1)为求第n-1个数,f(n-2)为第n-2个数。所以f1(n)=f1(n-1)+f1(n-2),然后设置出口,n=1或者n=2时返回1。

public class Test2 {public static void main(String[] args) {System.out.println(f1(6));}//斐波那契数列,第1项和第2项都为1,后面每一项都为相邻的前俩项的和,求第n个数//f1为求第n个数,第n个数为第n-1个数加上第n-2个数static int f1(int n){if(n==1||n==2)return 1;return f1(n-1)+f1(n-2);}
}

问题:求m和n的最大公约数,m>n

解法:若m%n=0,则n即最大公约数,若为k,则m与n的最大公约数可转换为 n与k的最大公约数

public class Test2 {public static void main(String[] args) {System.out.println(f2(36, 24));}//斐波那契数列,第1项和第2项都为1,后面每一项都为相邻的前俩项的和,求第n个数//f1为求第n个数,第n个数为第n-1个数加上第n-2个数static int f2(int m,int n){if(m%n==0)return n;return f2(n,m%n);}
}

问题:对无序数组arr进行排序,arr数组大小为k

解法:对无序数组arr排序 等价于 对前k-1个元素排序后,在对第k个元素插入排序。先进行第1个元素和第2个元素的排序,然后对第3个元素插入排序,然后对第4个元素插入排序....不断递归。

public class Test2 {public static void main(String[] args) {int[] arr= new int[]{9,9,7,6,5,4,3,2,1};f3(arr,arr.length-1);for (int i : arr) {System.out.println(i);}}static void f3(int[] arr,int k){if(k==0)return;//对前k-1个元素进行排序f3(arr,k-1);//把位置k的元素插到前面int x=arr[k];int index=k-1;while(index>=0 && x<arr[index]){arr[index+1]=arr[index];index--;}arr[index+1]=x;}
}

问题:汉诺塔

将1~N从a移动到c,b作为辅助
等价于:将1~N-1从a移动到b,将N移动到c,这时a为空,c为空(此时c有N但因为N不用动了,所以看作为空),然后在把1~N-1移动到c,a为辅助。

public class Test2 {public static void main(String[] args) {f4(3,"A","C","B");}//N个小盘子,from初始柱子,to目标柱子,help辅助柱子static void f4(int n,String from,String to,String help){if(n==1){System.out.println("move"+n+"from"+from+"to"+to);}else {f4(n-1,from,help,to); //把前n-1个盘子移到辅助柱子上System.out.println("move"+n+"from"+from+"to"+to);//n号盘子可以到达目标柱子f4(n-1,help,to,from); //n-1个盘子回到目标柱子}}
}

问题:上楼梯、一共n阶,一次性可以上1阶、2阶或3阶,问多少种走楼梯的方法

 上第n阶时,有三种情况,它可以从第n-1阶上1阶、从第n-2阶上2阶、从第n-3阶上3阶。

所有f(n)=f(n-1)+f(n-2)+f(n-3)。

public class Test2 {public static void main(String[] args) {System.out.println(f1(8));}static int f1(int n){if(n==1)return 1;if(n==2)return 2;if(n==3)return 4;return f1(n-3)+f1(n-2)+f1(n-1);}
}

问题:旋转数组,把一个递增数组的前若干个序列搬到该数组的最后,比如{1,2,3,4,5}->{3,4,5,1,2},求该数组的最小值

解法:最小值一定在无序的那一半中。

public class Test2 {public static void main(String[] args) {}//最小值一定在无序的那一半中。static int f2(int[] arr){int begin=0,end=arr.length-1;//考虑没有旋转这种特殊旋转if(arr[begin]<arr[end])return arr[begin];while(begin+1<end){int mid=begin+((end-begin)>>1);if(arr[mid]>arr[begin]){ //左侧为有序begin=mid;}else{ //右侧有序end=mid;}}return arr[end];}
}

问题:在给定一个无序的数组中,找出最长连续递增的子序列

解法:找到第一个递增子序列的长度,然后递归下一个递增子序列的长度,直到遍历完数组

public class Test2 {public static void main(String[] args) {int[] arr = new int[]{1,9,4,5,6,7,8,9,3,6,7};int[]ans=f4(arr,0);for(int i=0;i<ans.length;i++){System.out.println(ans[i]);}}static int[] f4(int[] arr,int start){if(start>=arr.length)return new int[]{};int count=1,index=start;while(index<arr.length-1 &&arr[index+1]>arr[index]){index++;count++;}int[] ans= new int[count];for(int i=start;i<start+count;i++){ans[i-start]=arr[i];}int[] a=f4(arr,start+count);return count>a.length?ans:a;}
}

问题:设计一个高效的求a的n次幂的算法

public class Test2 {public static void main(String[] args) {int n = -3int ans=f5(2,Math.abs(n));System.out.println(n>=0?ans:("1/"+ans));}static int f5(int a,int n){if(n==0)return 1;int ans=a;int ex=1;//指数while((ex<<1)<=n){ans*=ans;ex<<=1;}//差n-ex次方ans*=f5(a,n-ex);return ans;}
}

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

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

相关文章

git自动压缩提交的脚本

可以将当前未提交的代码自动执行 git addgit commitgit squash Git 命令安装指南 1. 创建脚本目录 如果目录不存在&#xff0c;创建它&#xff1a; mkdir -p ~/.local/bin2. 创建脚本文件 vim ~/.local/bin/git-squash将完整的脚本代码复制到此文件中。 3. 设置脚本权限…

C项目 天天酷跑(下篇)

上篇再博客里面有&#xff0c;接下来我们实现我们剩下要实现的功能 文章目录 碰撞检测 血条的实现 积分计数器 前言 我们现在要继续优化我们的程序才可以使这个程序更加的全面 碰撞的检测 定义全局变量 实现全局变量 void checkHit() {for (int i 0; i < OBSTACLE_C…

论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm

该文章是2023年论文RPG-Palm的升级版 论文&#xff1a;PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者&#xff1a;Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…

代码随想录算法【Day2】

Day2 1.掌握滑动窗口法 2.模拟题&#xff0c;坚持循环不变量原则 209 长度最小的子数组 暴力法&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {//暴力法int i, j; //i代表起始点&#xff0c;j代表终止点int sum; //…

android——屏幕适配

一、屏幕适配的重要性 在 Android 开发中&#xff0c;屏幕适配是非常关键的。因为 Android 设备具有各种各样的屏幕尺寸、分辨率和像素密度。如果没有进行良好的屏幕适配&#xff0c;应用可能会出现显示不完整、元素拉伸或压缩变形、字体大小不合适等问题&#xff0c;极大地影响…

oscp学习之路,Kioptix Level2靶场通关教程

oscp学习之路&#xff0c;Kioptix Level2靶场通关教程 靶场下载&#xff1a;Kioptrix Level 2.zip 链接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取码: 1111 搭建好靶场之后输入ip a看一下攻击机的IP。 确定好本机IP后&#xff0c;使用nmap扫描网段&…

第二十六周机器学习笔记:PINN求正反解求PDE文献阅读——正问题

第二十六周周报 摘要Abstract文献阅读《Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations》1. 引言2. 问题的设置3.偏微分方程的数据驱动解3.1 连续时间模型3.1.1 …

【安全编码】Web平台如何设计防止重放攻击

我们先来做一道关于防重放的题&#xff0c;答案在文末 防止重放攻击最有效的方法是&#xff08; &#xff09;。 A.对用户密码进行加密存储使用 B.使用一次一密的加密方式 C.强制用户经常修改用户密码 D.强制用户设置复杂度高的密码 如果这道题目自己拿不准&#xff0c;或者…

中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?

客户服务的个性化和标准化之间的矛盾一直是一个挑战。一方面&#xff0c;企业需要提供标准化的服务以保持运营效率和成本控制&#xff1b;另一方面&#xff0c;为了提升客户满意度和忠诚度&#xff0c;企业又必须满足客户的个性化需求。为此&#xff0c;中关村科金推出了智能客…

OPPO Android面试题及参考答案 (上)

性能优化方面,讲一下图片内存占用计算,以及如何避免持有不必要的引用。 在 Android 中,计算图片内存占用主要与图片的尺寸和像素格式有关。对于一张位图(Bitmap),其内存占用大小可以通过以下方式估算:内存占用 = 图片宽度 图片高度 每个像素占用字节数。例如,常见的 …

Agent 案例分析:金融场景中的智能体-蚂蚁金服案例(10/30)

Agent 案例分析&#xff1a;金融场景中的智能体 —蚂蚁金服案例 一、引言 在当今数字化时代&#xff0c;金融行业正经历着深刻的变革。随着人工智能技术的飞速发展&#xff0c;智能体&#xff08;Agent&#xff09;在金融场景中的应用越来越广泛。蚂蚁金服作为金融科技领域的…

ElasticSearch 的工作原理

理解 ElasticSearch 的工作原理需要从索引、搜索、以及其背后的核心机制几个方面来探讨。 1. ElasticSearch 是什么&#xff1f; ElasticSearch 是一个分布式搜索和分析引擎&#xff0c;适用于各种类型的数据&#xff0c;例如文本、数值、地理位置、结构化或非结构化数据。它基…

STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE开发环境(支持JLINK、STLINK、DAPLINK)

导言 Embedded IDE官网:https://em-ide.com/docs/intro 我猜肯定有部分人使用SI Keil开发STM32项目&#xff0c;也有vscode Keil开发STM32程序。SI或vscode编写代码&#xff0c;然后切换Keil编译、下载、调试程序。有一段时间&#xff0c;我也是这么干的。但是&#xff0c;程…

光谱相机的工作原理

光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异&#xff0c;以下是其具体工作过程&#xff1a; 一、光的收集 目标物体在光源照射下&#xff0c;其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统&#xff08;如透镜、反射镜…

ThinkPHP接入PayPal支付

ThinkPHP 5接入PayPal 支付&#xff0c;PayPal的流程是服务器请求Paypal的接口下单&#xff08;需要传订单id/支付成功的重定向地址/支付失败的重定向地址&#xff09;&#xff0c;接会返回一个支付地址&#xff0c;项目服务器把地址返给用户&#xff0c;用户打开链接登录Paypa…

stream流的toMap

假设有这么一个类: import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors;public class Student {private int id;private String name;public Student(int id, String name) {this.id id;…

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

神经网络、深度学习、卷积神经网络

好的&#xff01;我会尽量详细且易懂地为你解释这些概念&#xff0c;并在最后用简单直白的语言总结一下。 1. 神经网络思想 神经网络是灵感来自于生物大脑神经元的工作原理&#xff0c;是一种模仿人类大脑处理信息的方式来设计的数学模型。我们的大脑由亿万个神经元组成&…

设计模式01:创建型设计模式之单例、简单工厂的使用情景及其基础Demo

一、单例模式 1.情景 连接字符串管理 2.好处 代码简洁&#xff1a;可全局访问连接字符串。性能优化&#xff1a;一个程序一个连接实例&#xff0c;避免反复创建对象&#xff08;连接&#xff09;和销毁对象&#xff08;连接&#xff09;。线程安全&#xff1a;连接对象不会…

【不太正常的题】LeetCode.232:用栈的函数接口实现队列

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;初阶数据结构刷题 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f697; 1.问题描述&#xff1a; 题目中说了只能使用两个栈实现队列&#xff0c;并且只能使用…