##学习笔记 ##一、本周首先学习递归的特性、实现以及思维要点: 覃超老师讲解到在使用递归解题时,要注意以下几点: 1、避免人肉递归; 2、明确结束条件为; 3、找出最近简单子问题。 另外,覃超老师还给出了递归代码模板: 递归结束条件、处理当前层逻辑、下到下一层、清理当前层(非必须:根据变量作用域处理)。
为了熟练递归的使用和理解递归的思想: 本人通过对爬楼梯、括号生成、二叉树的前序遍历、二叉树的中序遍历、二叉树的后续遍历等题目进行了练习,加深可对递归思想的理解。 ##二、本周还学习了分治和回溯的实现和特性 1、首先分治、回溯都是找重复性问题。因此,其最主要的特点就是先拆分子问题,其实分治就是一种递归。 分治的代码模板为: 结束条件、处理当前层逻辑、下沉到下一层、对结果进行组合、清理当前层; 分治的代码模板比范型递归的代码模板多出了一个对结果进行组合的过程。
2、回溯法通常用最简单的递归方法来实现,在反复重复的尝试步骤后可能出现两种情况: 一是找到一个可能存在的正确的答案;二是在尝试了所有可能的分步方法后宣告问题没有答案。 在最坏的情况下,回溯法会导致一次复杂度为指数时间的计算。 通过学习括号生成和八皇后问题学习了回溯法。