递归
汉诺塔问题
目标:给定ABC三根柱子,将A柱子上从上到下从小到大套着的n个圆盘搬运到C柱子去
搬运规则:每次只能搬运一个圆盘,小圆盘一定要位于大圆盘之上
其中Hanoi(k,A,C,B)表示将柱子A上的最上面k个圆盘经由C柱子搬运到B柱子
move(k,A,C)表示将序号为k的圆盘从A柱子移动到C柱子
递归树
时间复杂度
生成排列问题
求{1,2,...,n}的所有排列
两种思路:1)位置固定,将元素插入位置,即外层循环是遍历位置的序号;2)元素顺序固定,为元素分配位置,即外层循环是遍历元素
两种思路在元素个数和位置个数一样时,效果一样;但在元素个数比位置个数大时,使用思路2)需要剪枝,使用思路1)不需要
思路1)
第一个函数是初始化函数,采用全形态形式化
第二个函数是递归函数,基于交换来为固定位置分配元素,每次回退时注意要恢复本次向下搜索所做的交换
递归树
思路2)
第一个函数是初始化函数,采用增量形式化
第二个函数是递归函数,基于赋值来为固定位置分配元素,每次回退时注意要恢复本次向下搜索所做的赋值
递归树
时间复杂度
nT(n-1)+n中的第二项n是初始化的时间代价
选择排序
伪代码
时间复杂度