当前位置:   article > 正文

基础算法之递推与递归_递推与递归算法 csp>j

递推与递归算法 csp>j

递推

根据题目能写出递推式与边界情况,那么就可以用递推来解决问题

递归

递归这里最简单的三种应用:

1.指数型枚举,思路是我们利用递归函数,一个一个处理要枚举的数,每个数都有两种情况,选或者不选,最后我们枚举完了所有的数,也就是到了边界,就可以处理/输出当前的情形了

2.组合型枚举,这个问题的解决是在上一个枚举的基础上,加上一个剪枝得到的,每次我们进入函数的时候首先判断一下,如果当前选的数目大于要选择的目标数目,或者当前选的数目加上还未选的数目小于要选择的目标数目,则返回

3.排列型枚举,这个问题的思路是,函数的参数是位置,当位置大于我们排列的数目时,就到了边界,可以统计当前结果了,除此之外,我们枚举可以填的数字,如果已经填过,那么跳过这个循环,没有填过,那么填上,并改变标志数组,

排列型枚举的解决问题的思路和深入浅出程序设计竞赛上面回溯法的模板很相似,那个模板是,函数的参数是递归的层数,或者说要填的第几个空。递归的边界是,所有的空都被填完了,这时记录更新答案,判断最优解。接下来是枚举这个空能填的选项,可以填,就填,保存现场,递归,恢复现场,

  1. void dfs(int k) { // k表示递归的层数,或者说要填第几个空
  2. if (所有的空都填完了) {
  3. 记录更新答案/判断最优解;
  4. return;
  5. }
  6. for (枚举当前空能填的选项) {
  7. if (这个选项合法) {
  8. 记录下这个空,保存现场;
  9. dfs(k + 1);
  10. 取消这个空,恢复现场;
  11. }
  12. }
  13. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/916219
推荐阅读
相关标签
  

闽ICP备14008679号