递归算法的正确性容易用数学归纳法得到证明.
Hanoi 塔
# 将 n 个圆盘从 x 搬到 z; y 作为辅助. hanoi(n, x, y, z): if n == 1: print(x, " -> ", z) else: hanoi(n-1, x, z, y) print(x, " -> ", z) hanoi(n-1, y, x, z)
九连环
# 取下前 n 个环
unload(n):
if n == 1:
print("unload #1")
elif n == 2:
print("unload #2")
print("unload #1")
else:
unload(n-2)
print("unload #", n)
load(n-2)
unload(n-1)
# 装上前 n 个环
load(n):
if n == 1:
print("load #1")
elif n == 2:
print("load #1")
print("load #2")
else:
load(n-1)
unload(n-2)
print("load #", n)
load(n-2)
traceback(n): if n == MAX_DEPTH: output(vec) else: for move in possible_moves: move(vec[n]) traceback(n+1) unmove(vec[n])
全排列
输入一个数组 arr, 输出它的全排列.
遍历子集
输入一个数组 arr, 输出它的全部子集.
`k`-子集
输入一个数组 arr 和一个数字 k, 输出数组的所有大小为 k 的子集.
拉丁方 (幻方)
把数字 1 到 N*N 填入方阵, 每个数字恰好出现一次, 且行和、列和、对角线和均相等.
values 是已经给出的数字.
n 皇后问题 将 n 个国际象棋的皇后放在 n*n 棋盘上, 使得她们不能互相攻击. 即每行、每列、每条斜线上最多有一个皇后.
走迷宫