递归算法与分治思想

递归算法

直接或间接的调用自身的算法称为递归函数,采用栈结构,先调用的最后返回。

主要形式就是先纵后横,一个分支走到底,再退回一个到兄弟节点,依次回退。

列出递归的三种形式:切蛋糕、递推公式、等价转换。

递归要素:

  • 明确递归得到结果是什么
  • 提取重复的逻辑,缩小问题的规模不断递去(大部分问题由大向小递归)
  • 变化的参数
  • 明确递归的终止条件

阶乘函数:

  • 明问题:jiecheng(n) 返回n!
  • 找重复:n!=n*(n-1)!=n*(n-1)*(n-2)!=.....
  • 找变化:变化的量为参数
  • 找边界:边界时n=0时,返回1

public int jiecheng(int n){if (n == 1){return 1;//递归出口}else return n * jiecheng(n-1);//递归方程,从大到小}

字符串的翻转

  • 明问题:recerse(s) 返回s的翻转字符
  • 找重复:字符串的翻转等于最后一个字符+前n-1个字符的翻转....
  • 找变化:变化的量为字符串的长度,作为参数
  • 找边界:边界时长度为0时结束。
public static String reverse(String s,int n){if (n==0) return "";return s.charAt(n-1)+reverse(s,n-1);}

斐波那契数列(Fibonacci数列)

  • 明问题:Fibonacci(n) 返回n对应的斐波那契数
  • 找重复:n的斐波等于n-1的斐波+n-2的斐波
  • 找变化:变化的量为参数
  • 找边界:边界时n=1 || 2时,返回1

无穷数列1,1,2,3,5,8,13,21,34,55,……,称为Fibonacci数列。

斐波那契数列的分段函数(递归函数)为:

public int fibonacci(int n){if (n == 1 || n == 2){return 1;//递归结束位置}else return fibonacci(n-1) + fibonacci(n-2);//递归函数}

最大公约数

  • 明问题:辗转相除的m%n
  • 找重复:m与n的最大公约数由n与m%n的最大公约数决定...依次类推
  • 找变化:变化的量为m,n的取值。
  • 找边界:边界时m%n==0时,返回n
   public static int gcb(int m,int n){if (m%n==0) return n;return gcb(n,m%n);}

指数运算的改进

a^{n}:

基本思想改变底数与指数,将底数变为原来的平方,则相应的指数变为原来的二倍。

    private static int pow0(int a,int n) {if (n==0) return 1;int res=a;//底数int ex=1;//指数while(ex*ex<n){//ex*ex来判断下一层的res*res是否超过a的n次幂res=res*res;//改变底数ex*=2;//改变指数}return res*pow0(a,n-ex);//递归思想,递归剩余部分,不是2的倍数}

上楼梯问题

一共有n层楼梯,每次只能上1层或2层或3层,问一共有几种上楼的方法。

  • 明问题:walker(n) 返回n层楼梯的走法
  • 找重复:若第一次上1层,则变成求剩余n-1层有几种走法问题;若第一次上2层,则变成求剩余n-2层有几种走法问题;若第一次上3层,则变成求剩余n-3层有几种走法问题;
  • 找变化:楼梯的层数在发生变化
  • 找边界:当楼梯只有1层或2层或3层时分别有1种,2种,4种走法
private static int walker(int n) {//此函数返回上n层楼梯所需的时间if (n==0) return 0;if (n==1) return 1;if (n==2) return 2;if (n==3) return 4;return walker(n-1)+walker(n-2)+walker(n-3);}

递归排序 

  • 明问题:sort(nums,n)返回0~n排好序的数组
  • 找重复:对n个元素排序可以看作最后一个元素插入对前n-1个元素的排序
  • 找变化:变化的量为排序的边界值的取值。
  • 找边界:边界时n==0时结束
public static void sort(int []nums,int n){//n表示最后一个元素的索引if (n==0) return;sort(nums,n-1);int t=nums[n];int i=n-1;for (;i>=0;i--){if (nums[i]<=t) break;nums[i+1]=nums[i];//数组的插入操作}nums[i+1]=t;//最终空下来的位置时i+1}

瓷砖铺放问题

有⼀长度为N(1<=N<=10)的地板,给定两种不同瓷砖:⼀种长度为1,另⼀种长度为2,数⽬不限。要将这个长度为N的地板铺满,⼀共有多少种不同的铺法?

一共有n块砖,第一次铺两块就还剩f(N-2),第一次铺一块就还剩f(n-1)

public int cizhuan(int n){if (n == 1){return 1;}if (n == 2){return 2;}return cizhuan(n-1) + cizhuan(n - 2);}

 整数划分问题

将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。

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

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

相关文章

数据库第五次实验

目录 1 创建数据表 2 创建多个用户 ​​​​​​​3 用户的授权 ​​​​​​​4 用户权限的回收 ​​​​​​​5 角色的创建与授权 ​​​​​​​6 回收角色的权利 ​​​​​​​7 审计的设置 1 创建数据表 SQL语句&#xff1a; use experimentfive; create table…

2024年开工,煮熟的鸭子飞了咋办

去年是我居家创业的第一个年头&#xff0c;业绩总体来说不及预期&#xff08;上班的收入&#xff09;&#xff0c;仅仅满足日常开支&#xff0c;没有任何的盈余。 去年有点项目没完成收尾&#xff0c;所以初四我就选择开工了&#xff0c;就图一个大吉大利。年前积压的客户需求…

【uCore 操作系统】1. 应用程序与基本执行环境

文章目录 【 1. 代码框架简述 】1.1 OS 是怎么跑起来的&#xff1f;1.1.1 qemu 的作用1.1.2 rustsbi.bin 的作用 1.2 qemu 是怎么跑起来的&#xff1f;1.3 OS 文件夹1.3.1 kernel.ld1.3.2 entry.S1.3.3 main.c1.3.4 sbi.c 1.4 bootloader 文件夹 【 2. makefile 和 qemu 】2.1 …

【SpringBoot】项目启动增加自定义Banner

SpringBoot项目启动增加自定义Banner 前言 最近有个老哥推荐我给博客启动的时候加上自定义Banner&#xff0c;开始我还不太明白他说的是那部分&#xff0c;后面给我发了这样一个&#xff0c;瞬间就懂了~ // _ooOoo_ …

C++入门篇——命名空间

在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存 在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c; 以避免命名冲突或名字污染&#xff0c;namespace关键…

数字经济政策 | ZF工作报告-60个文本词频

根据各省政府工作报告&#xff0c;参考金灿阳(2022)和陶长琪(2022)&#xff0c;借助Python软件&#xff0c;统计数字经济相关的关键词词频&#xff0c;分别记为数字经济政策词频A、数字经济政策词频B A文献参考 B文献参考 年度趋势 一、数据介绍 数据名称&#xff1a; 政府工…

Spring Boot java -jar --spring.profiles.active=dev 失效问题

之前动态部署修改配置文件的情况不多&#xff0c;所以也没注意过&#xff0c;这个问题今天困扰了好久&#xff0c;经过多方查询后得到了解决办法 直接上代码 <profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><profi…

债券专题二:可转债估值-二叉树模型

1. 模型背景 由于可转债自身的属性较多&#xff0c;因此对其定价的难度也会加大&#xff0c;在诸多影响因素中&#xff0c;未来的股价占比最高。由于股价的不可预测性&#xff0c;导致了可转债的定价在实际交易中作用非常有限。随着可转债发行数量和规模的增大&#xff0c;越…

2.18 C++ day6

思维导图 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲…

C++初阶(十三) 模板

一、非类型模板参数 模板参数分类类型形参与非类型形参。类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…

基于微信小程序的健身房私教预约系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

嵌入式调试工具之GDB

在单片机开发中&#xff0c;我们可以通过集成式的IDE 来进行调试&#xff0c;比如 MDK、IAR 等。 GDB 工具是 GNU 项目调试器&#xff0c;基于命令行使用。和其他的调试器一样&#xff0c;可使用 GDB工具单步运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等&#…

2023我患上了AI焦虑

2023我患上了AI焦虑 来自&#xff1a;宝玉 原文链接&#xff1a;https://baoyu.io/blog/ai/i-am-suffering-from-ai-anxiety-in-2023 2023 年对我来说是神奇的一年&#xff0c;我意外的从一个程序员变成了一个 AI 资讯届的“网红”&#xff0c;到年底的时候我在 X 平台的阅读量…

IT行业高含金量证书全解析:开启职业生涯新篇章

在快速发展的IT行业&#xff0c;持续学习和专业认证是提升个人竞争力的重要途径。全球范围内存在着众多的IT认证&#xff0c;它们不仅能够验证你的技术能力&#xff0c;还能在求职和职业晋升中起到关键作用。 本篇博客将深入探讨IT行业中部分高含金量的证书&#xff0c;包括中…

最长子串和回文子串相关的算法题解

这里写目录标题 一、3. 无重复字符的最长子串二、5. 最长回文子串三、647. 回文子串四、516. 最长回文子序列 一、3. 无重复字符的最长子串 中等 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释:…

MyBatis核心配置文件详解

MyBatis核心配置文件详解 一、Environments标签1.Environment标签详解&#xff08;1&#xff09;如何创建对应环境的 SqlSessionFactory对象 2.transactionManager标签详解3.dataSource标签详解&#xff08;1&#xff09;UNPOOLED&#xff08;2&#xff09;POOLED&#xff08;3…

线性回归-使用ClickHouse机器学习函数

本文字数&#xff1a;5923&#xff1b;估计阅读时间&#xff1a;15 分钟 作者&#xff1a;Ensemble 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 这原本是转发的ensemble analytics的文章。 【https://ensembleanalytics.io/blog/l…

Java面试第一站:计算机网络基础知识

该系列会持续更新&#xff0c;关注我&#xff0c;第一时间获取我的最新动态哟 Java面试中&#xff0c;经常会问到跟计算机网络知识相关的考点&#xff0c;有的小伙伴不是很明白。考察网络知识有什么意义&#xff1f; 因为编程的时候&#xff0c;多数的情况下是不用我们来编写 …

春节专题|产业7问:区块链厂商的现在和未来——数字资产厂商

2023转瞬即逝&#xff0c;不同于加密领域沉寂一整年后在年末集中爆发&#xff0c;对于我国的区块链厂商而言&#xff0c;稳中求胜才是关键词&#xff0c;在平稳发展的基调下&#xff0c;产业洗牌也悄无声息的到来。 从产业总体而言&#xff0c;在经过了接近3年的快速发展后&…

【鸿蒙手机】获取UDID,并添加签名认证

一、打开开发者模式 1、手机型号华为nova 10 pro , HarmonyOS版本 4.0&#xff0c;路径&#xff1a;设置-> 关于本机-> 多次连续点击”软件版本“ 这一行&#xff0c;一般是是5到7次&#xff08;我是点击了5次&#xff09;&#xff0c;第一次会弹出输入密码&#xff0c;验…