美文网首页数据结构与算法
数据结构第二季 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 递归 、回溯

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