124
社区成员




简单概述:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。
基本思想类同于:图的深度优先搜索,二叉树的后序遍历
回溯法的实现方法有两种:递归和递推(也称迭代)。一般来说,一个问题两种方法都可以实现,只是在算法效率和设计复杂度上有区别。
def age(n):
if n == 1:
return 18
return age(n –1) + 2
print(age(5))
#age(5) = age(4) +2 第一次进入
#age(4) = age(3) +2 第二次进入
#age(3) = age(2) +2 第三次进入
#age(2) = age(1) +2 第四次进入
#age(1) = 18 第五次进入,此时达到结束的条件,递归终止
这是一个典型的递归递推算法,它的每一次执行都是基于上一次的结果。
def fx(n):
print("递归进入第",n,"层")
if n == 3:
return
fx(n + 1)
print("递归退出第",n,"层")
fx(1)
print("程序结束")
上述是一个关于递归回溯算法的实例,递归必须要有一个明确的结束条件, 否则就变成死循环导致栈溢出,都是以“if”语句作为结束条件的。每递归一次要解决一些事情,否则就失去了递归的意义。