“递归只应天上有,迭代还须在人间”,从这句话我们可以看出递归的精妙,确实厉害,递归是将问题规模逐渐减小,
然后再反推回去,但本质上是从最小的规模开始,直到目标值,思想就是数学归纳法,举个例子,求阶乘 N!=(N-1)!*N ,
而迭代是数学中的极限思想,利用前次的结果,逐渐靠近目标值,迭代的过程中规模不变,举例如For循环,直到终止条件。
递归的思想不复杂,但代码理解就麻烦了,要理解一个斐波那契数组递归也不难,比如下面的回溯算法递归,for 循环里面
带递归,看代码是不是晕了?好,下面我们专门来聊聊这个框架!
作者原创文章,谢绝一切形式转载,违者必究!
准备:
Idea2019.03/JDK11.0.4
难度: 新手--战士--老兵--大师
目标:
回溯算法分析与应用
1 回溯算法
先给出个回溯算法框架:
backtrack(路径,选择列表){
//结束条件
将中间结果加入结果集
for 选择 in 选择列表:
//做选择,并将该选择从选择列表中移除
路径.add(选择)
backtrack(路径,选择列表)
//撤销选择
路径.remove(选择)
}
为了理解上述算法,