1. 汉诺塔问题
递归算法,分为 3 步:将 n 个 a 上的盘子借助 c 移动到 b
① 将 n-1 个 a 上的盘子借助 b 移动到 c
② 将 a 上的盘子移动到 b
③ 将 c 上的 n-1 个盘子借助 a 移动到 b
所有盘子都移动到 b 上了
1 2 3 4 5 6 7 8 9 10 11 |
|
2. 全排列问题
问题描述:设R={r1,r2,…,rn}是要进行排列的n个元素,求R的全排列Perm(R)。
算法思路:
① 从 n 个数中取出数列的第一个数,然后不断将数列中剩余的数与第一个数进行交换,计算剩余 n-1 个数的全排列。
② 对 n - 1 个数进行同样的递归操作,当交换的第一个数的下标 k 和 序列末尾的 m 相同时,说明前置所有数都已经交换完成,进行输出。
③ 递归结束后进行状态回调,保证不影响下一次递归的进行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
3. 利用递归与分治策略寻找最大值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
4. 归并排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
5. 快速排序
图解快速排序://www.jb51.net/article/113769.htm
递归 + 交换法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
6. 棋盘覆盖问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
以上就是C++递归与分治算法原理示例详解的详细内容