1.递归和非递归
不能用递归即为只能用循环。
心得:
1.在递归中是把某一参数的子结构(如二叉树节点的孩子)当作它传入该函数中,从而完成递归,实现迭代,在循环中则变成通过赋值使该参数的子结构变成它进入后续循环从而模拟递归,并且在递归时不属于递归部分的可以另外写个方法把这些放在那再在那里调用递归
2.在循环中建立全局变量来把相对关系(如树的父子关系)一层层循环地迭代,而递归可以通过退出前一层递归时的返回值来建立与当前层递归的关系
3.在作用于树时,递归是一直进入到退出条件(一般是底层结构)才 开始逐步退出递归,是自底向上,类似于中序遍历,而递归则是从根节点就开始一路访问下去,类似于先序。因此当需重新建立父子之间的关系时,循环是声明一个指向当前节点和其父节点的应用来实现,而递归则是等到退出递归时返回子节点再处理与父节点的关系
2.如何记录某种情况存在:
把该种情况时的各变量作为数组下标,如果是统计则把对应的数值加1(如统计字符出现次数),如果是证明存在则把其赋为true(如在动态规划或贪心时各种情况把评价维度提炼出作为数组下标,如数组分裂问题中i个数的总和k时的i和k)
3.算法题的五种解法:
1:举例
2:模式匹配,跟做过的题建立联想
3:简化推广,修改约束条件来简化条件,从而找到思路
4:简单构造法,设法递推
5:数据结构头脑风暴,要解决问题必然用到某种数据结构,设法把问题跟某种数据结构联系上,然后根据那种数据结构的常用操作来启发,相当于穷举法
纯粹地读书,只为好奇心