美文网首页数据结构与算法
数据结构第二季 Day14 递归 、回溯

数据结构第二季 Day14 递归 、回溯

作者: 望穿秋水小作坊 | 来源:发表于2021-10-19 17:17 被阅读0次

一、递归练习

1、上楼梯?(每次都过一下题目,感觉还是没理解透彻)

image.png image.png

2、汉诺塔(Hanoi)?

image.png image.png
  • 补充一个小插曲,如何判断递归基是要写一个还是两个?
  • 如果递归里面有 n-1 和 n-2,那么递归基就需要 if(n < 2)的情况;
  • 如果递归里面只有 n-1,那么递归基只要判断 n==1 的情况;

3、汉诺塔的时间复杂度和空间复杂度是多少?

image.png

4、递归函数的调用栈情况是怎么样的(脑海中要有个大概)?递归能转换成非递归吗?

image.png

5、递归转非递归的万能之法是什么?

  • 递归转非递归的万能之法
  • 自己维护一个栈,来保存参数、局部变量
  • 但是空间复杂度依然没有得到优化
image.png

6、从上述自定义栈帧思想,我们可以看出递归转非递归的核心在什么(细细品味,优化方向问题,很重要)?

  • 核心:尽量做到使用一组相同的变量来保存每个栈帧的内容
image.png

二、尾调用

1、什么是尾调用?什么是尾递归?

image.png image.png

2、对于尾调用,编译器如果要进行优化,需要什么技术支持?尾调用能被优化的原因是什么?

  • 对于尾调用,编译器如果要进行优化,需要 能动态修改栈帧的长度
  • 尾调用能被优化,是因为尾调用的函数,不在使用当前栈帧的局部变量了,所以可以重复利用栈帧

3、为什么尾递归的优化比尾调用简单多了?要能简述尾递归优化思路?

image.png
  • 下图是未进行尾递归优化的汇编
image.png
  • 下图进行尾调用优化后的汇编代码
image.png

4、使用尾递归的思想优化斐波那契数列(了解即可)?

image.png

三、回溯(Back Tracking)

1、回溯(Back Tracking)的思想是什么?之前学过的什么搜索是典型的回溯应用?

image.png

2、八皇后问题描述?

image.png

3、八皇后解决思路?

image.png

4、 使用回溯法解决此问题的思路?(太神奇、太强了!)

image.png image.png image.png image.png

相关文章

  • 数据结构第二季 Day14 递归 、回溯

    一、递归练习 1、上楼梯?(每次都过一下题目,感觉还是没理解透彻) 2、汉诺塔(Hanoi)? 补充一个小插曲,如...

  • 8.30 leetcode刷题(2)

    递归和回溯:17 电话号码 思路:运用递归去实现回溯算法的思想。回溯算法本质上是一种暴力搜索,通过递归调用去实现,...

  • 数据结构与算法(第二季):递归、回溯

    递归(Recursion) 一、概念 函数(方法)直接或间接调用自身。 二、递归现象 三、函数的递归调用过程 如下...

  • LeetCode之回溯算法

    回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。因为回溯的本质是穷举,穷...

  • 二叉树算法之0-计算二叉树的深度

    算法思想:使用递归 算法解析:分别递归左树和右树,递归到叶子节点时返回0,递归回溯时值+1,不断累积回溯的深度,每...

  • 递归、迭代、回溯、广度和深度优先

    在学习算法的时候,经常碰到递归、迭代、回溯、广度优先和深度优先算法,可是回溯使用了递归,深度优先也使用了递归,广度...

  • 递归,回溯

    什么叫递归:函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归; 递归的特点:1、递归函数必须要有终止...

  • 93. Restore IP Addresses

    基本上DFS就是回溯,回溯就是用递归来实现的;

  • 递归2-回溯与递归

    I. 回溯算法基础 回溯与递归的区别和联系  很多人不理解回溯与递归到底是什么关系。其实很简单,回溯算法是一种算法...

  • 递归(迭代、递归、回溯)

    递归的本质: 是指一种通过重复将问题分解为同类的子问题而解决问题的方法,其核心思想是分治策略。 递归分为两个过程,...

网友评论

    本文标题:数据结构第二季 Day14 递归 、回溯

    本文链接:https://www.haomeiwen.com/subject/xxeaoltx.html