当前位置: 首页 > news >正文

徐州睢宁网站建设沧州wap网站制作

徐州睢宁网站建设,沧州wap网站制作,ui设计在线培训机构,如何建立视频号前情提要 上一篇递归算法讲解在这里 递归算法讲解#xff08;结合内存图#xff09; 没看过的小伙伴可以进去瞅一眼#xff0c;谢谢#xff01; 递归算法的重要性 递归算法是非常重要的#xff0c;如果想要进大厂#xff0c;以递归算法为基础的动态规划是必考的…前情提要 上一篇递归算法讲解在这里 递归算法讲解结合内存图 没看过的小伙伴可以进去瞅一眼谢谢 递归算法的重要性 递归算法是非常重要的如果想要进大厂以递归算法为基础的动态规划是必考的所以我们一定要好好学习递归算法 本篇博客继续讲解一些递归的经典demo demo01 递归实现求int类型的数组arr中前n项和其中arr.lengthn并且arr当中的元素总和在[-2147483648, 2147483647]之间 还记得递归三步走吗我们来回顾一下 1. 明确递归的参数和返回值 很显然递归的参数有两个数组arr 要求和的序列长度n 递归的返回值是我们求得的和不会超过int类型的取值范围所以数组求和很明显还是int 2. 明确递归的终止条件 我们已知的部分当中n最小的情况就是递归的终止条件 我们目前已知的sum(1)肯定是知道的等于arr[0];sum(2)也是知道的等于arr[0]arr[1] 1比较小所以n1就是递归的终止条件 递归就是循环递归的终止条件就是循环的中止条件 还有一些诸如ijij都可能称为递归中止条件 3. 明确递归的单层递归逻辑 递归的单层递归逻辑是最难想到的 其实明确单层递归逻辑很像是中学数学中让我们求数列的通项公式我们需要找规律 假设arr {347181247……} sum(1) 3sum(2) 7sum(3) 14sum(4) 15…… 那么sum(n) 差不多是这样的一个过程 当然本题目是比较简单的一眼就能看出来sum(n) sum(n-1) arr[n - 1] 递归难就难在我们很多时候看不出来这个递归逻辑此时就需要罗列出来找规律 从结束到开始从部分到整体从具象到抽象…… 代码 public static void main(String[] args) {int[] arr {3, 4, 7, 1, 8, 12, 47};System.out.println(sum(arr, 5));}// 返回类型是int, 参数类型是arr和npublic static int sum(int[] arr, int n) {// 前0项和显然是0if (n 0) {return 0;}// 递归终止条件返回arr[0]if (n 1) {return arr[0];}// 单层递归逻辑需要注意要加上arr[n-1]而不是arr[n]因为数组的下标是[0, arr.length - 1]return sum(arr, n - 1) arr[n - 1];}输出结果 demo02 递归实现折半查找 1. 明确递归的参数和返回值 递归参数是数组arr和要查找的值val 以及leftmidright三个arr下标用于判断后的移动 返回类型可以返回找到的数值的下标int也可以什么都不返回void 2. 明确递归的终止条件 很明显是arr[i] val但是我们用谁去充当这个i指针呢 熟悉折半查找的同学都知道折半查找需要至少3个指针leftmidright 每一个指针都有可能在移动过程中直接指向val我们应该选择谁当指针i呢 很明显是midmid可以代表所有情况left和right就不一定而且可能陷入死循环 比如arr[mid]正好指向val但是arr[left] ! val那么就会出现arr[mid]既不大于val也不小于 mid但是无法跳出while循环的情况也就是死循环 3. 明确递归的单层递归逻辑 当arr[mid] ! val时执行递归 如果arr[mid]val说明val在mid左边递归到左区间寻找 如果arr[mid]val说明val在mid右边递归到右区间寻找。 代码 public static void main(String[] args) {// 折半查找的前提是数组有序int[] arr {1, 4, 34, 51, 432, 1111, 2776};halfSearch(arr, 4, 0, 3, arr.length - 1);}public static void halfSearch(int[] arr, int val, int left, int mid, int right) {if (val arr[mid]) {System.out.println(val 找到了,下标是 mid);return; }if (val arr[mid]) {halfSearch(arr, val, mid, (right mid) / 2, right);// mid 1也行} else if (val arr[mid]) {// else即可halfSearch(arr, val, left, (mid left) / 2, mid);// mid - 1也行}}此时就会有聪明的小伙伴问了如果没找到呢你这种写法会栈溢出啊 其实我们只需要给left和right加一个判断就可以了 public static void main(String[] args) {// 折半查找的前提是数组有序int[] arr {1, 4, 34, 51, 432, 1111, 2776};halfSearch(arr, 432, 0, 3);}public static int halfSearch(int[] arr, int val, int left, int right) {int mid (left right) / 2;if (val arr[mid]) {System.out.println(val 找到了,下标是 mid);return mid;}if (left right) {if (val arr[mid]) {return halfSearch(arr, val, mid 1, right);// mid 1也行} else {// else即可return halfSearch(arr, val, left, mid - 1);// mid - 1也行}} else {System.out.println(val 没找到);return -1;}}如果left都大于right了arr[mid]还是不等于val那就说明真的没有这个值 demo03 二叉树的中序遍历 左根右----------------中序遍历 如果一个要访问的结点存在左子树那么先访问左子树的最左结点 1. 明确递归的参数和返回值 递归参数是二叉树TreeNode我们叫它root 返回类型void即可我们在遍历途中打印每一个结点的val值即可 2. 明确递归的终止条件 root不断遍历只要不是空就可以一直遍历 3. 明确递归的单层递归逻辑 上图这棵树中序遍历的结果是73713463197648 因为树是链式结构我们要遍历一棵树只能先从根节点开始遍历不能跨越访问只能root.left.left……这样访问这样就令很多同学犯难我要怎么先从7开始访问呢 这里其实非常简单不要想的太复杂 我们仍然先从根节点开始访问然后访问左子树最后访问右子树 但是我们在访问左子树结束后再打印我们只需要保证打印顺序是左根右即可 伪代码不能运行 public static void middle(TreeNode root) {if (root null) {return;}// root不是null先判断左孩子是不是null再判断右孩子是不是nullmiddle(root.left);System.out.println(left.val);middle(root.right);}
http://www.hkea.cn/news/14380318/

相关文章:

  • 网站配色与布局 教材江西省建设厅官方网站
  • 网站售后服务内容糗事百科 wordpress
  • vue 大型网站开发网站优化软件排名器
  • 定制软件的网站中牟网络推广外包
  • 百度热榜实时热点深圳关键词优化软件
  • 济南1951年建站上海外贸学院现在是什么学校
  • 深圳html5网站制作网站编辑字体字号
  • 手机网站推荐哪个好简单的广告设计图片
  • 网站开发刷新图片企业网上银行
  • 做网站建设公司赚钱青岛网站建设方案外包
  • 网站建设服务器篇四川建设厅报名网站
  • 黑龙江城乡建设厅网站东莞阳光网官方网站登录
  • 企业管理网站系统广州市信息技术职业学校
  • 营销型网站策划设计网站建设与管理技术实训教程pdf
  • 做企业网站代码那种好商业网站建设案例课程
  • 网站seo推广优化报价表重庆茶叶网站建设
  • 化工企业建网站app下载量统计查询
  • 网站上如何做天气插件不锈钢公司网站源码 网站建设 产品3级分类asp源码
  • 网站设计开发收费标准中国网站排名网
  • 网站可以做315认证吗自己做网站在线看pdf
  • 南皮县网站建设价格wordpress 文章 页面
  • 网站设计公司如何做好网站建设wordpress 获取相册图片
  • 怎样提高网站知名度wordpress简单主题
  • 上海企业网站模板建站平台wordpress escattr
  • php网站建设制作服务建设一个门户网站需要多少钱
  • 网站开发项目范围说明书意义如何做网络推广人员
  • 嘉兴网站建设解决方案网站移动字幕要怎么做
  • 万网网站域名品牌策划书案例
  • 网站做语言切换网站备案 空间
  • 做内贸只要有什么网络推广网站代理公司网站备案