汉诺塔问题:有ABC三根柱子,A上有一些盘子,按从小到大顺序放置,把A上的盘子移到C上,并且要保证盘子也是按照从小到大顺序放置。求这个移动的过程。如果 n = 1,则将这一个盘子直接从 A 柱移到 C 柱上。否则,执行以下三步: ① 用 C 柱做过渡,将 A 柱上的 (n-1) 个盘子移到 B 柱上: ② 将 A 柱上最后一个盘子直接移到 C 柱上; ③ 用 A 柱做过渡,将 B 柱上的 (n-1) 个盘子移到 C 柱上。
递归过程改为非递归过程
递归过程效率低,重复计算多,改为非递归过程的目的是提高效率
单向递归和尾递归可直接用迭代实现其非递归过程
其他情形必须借助栈实现非递归过程
应用1:n皇后问题
在 n 行 n 列的国际象棋棋盘上,若两个皇后位于同一行、同一列、同一对角线上,则称为它们为互相攻击。n皇后问题是指找到这 n 个皇后的互不攻击的布局。