递归问题与递归结构(四)

本文介绍了全递归(Exhaustive Recursive)和部分递归的概念,重点讨论了回溯法(Backtracking)在解决子集、排列问题中的应用,如8皇后问题和数独求解。回溯法是一种在递归树上寻找解的策略,当找到符合条件的解时,会终止其他递归调用。此外,文章还提及了搜索算法在字母公式问题中的应用,强调了利用问题约束条件来提高算法效率的重要性。
摘要由CSDN通过智能技术生成

全递归(Exhaustive Recursive)、回溯(Backtracking)与搜索

        无论是子集(组合)问题还是排列问题,如果要输出其所有可能的递归结果,就称之为全递归,其相当于访问相应递归树的所有叶子结点。有一类建立在递归树上的问题是只要获取所有结果中的一个或几个就可以得到相应解了,这类问题用部分递归(Partial Recursive)就可以求解。它相当于在根据相关条件的约束下,访问到递归树的某一个或几个叶子结点。一旦找到想要的解,就终止所有其他的递归调用并返回结果即是所谓的回溯法(Backtracking),带返回值的递归函数就用来执行此类任务。

       比较经典的8皇后问题,就是用所谓的回溯法来解的,8皇后属于排列问题,因此回溯法也是在此基础上展开的。给出算法:

bool  solve(Grid<bool>& board,  int col)

{

     if(col >= board.numCols())  return true;

     for( int rowTotry = 0;  rowTotry<board.numRows();  rowTotry++)

     {

           if( IsSafe(board, rowTotry,  col) )

           {

                  PlaceQueen( board,  rowTotry,  col );

                  if( solve(board,  col+1) )  return true;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值