递归
1.心安理得的写
只做一部分(领导,只做一个示例)
找变化:变化的量作为参数
边界:进入时就要设置好
切一刀:只做切下来的一小部分
递归分解:直接量+ 小规模 or 多个小规模
出口:
找感觉
1.求阶乘
2.打印i到j
3.数组求和
4.翻转字符串
2.递推公式
基础练习
1.斐波那契数列
1 1 2 3 5 8 13……
每一项都是前两项之和
求第n项
2.求m和n的最大公约数
m%n
3.插入排序
对数组的第0~倒数第一个数进行排序
等价于:
对数组的第0~倒数第二个数 这部分 进行排序,
把倒数第一个插入进数组
4.汉诺塔
将1~N 从A移动到B,C作为辅助
规模变小,形式等价
切开/划分 方法:
把除了最大的盘子以外的移动到C位置
将1移动到C
2~N移动到B
求挪动的步骤
1.把1~N-1挪动到C
2.把N挪动到B
3.把1~N-1挪动到B
递归总结:
所有的循环都可以改成递归
对于一个大问题,找子问题
5.小白上楼梯
非递归:
6.旋转数组的最小数字 改造二分法
7.排好序的字符串中混入空串,求某个字符在新的字符串中的的下标
8.求最长连续增的子序列
9.设计算法求a的n次幂