回溯和递归的区别?

2024-01-06

回溯和递归有什么区别?这个程序是如何运作的?

void generate_all(int n)
{
    if(n<1) printf("%s\n", ar);
    else{
            ar[n-1]='0';        //fix (n)th bit as '0'
            generate_all(n-1);  //generate all combinations for other n-1 positions.
            ar[n-1]='1';        //fix (n)th bit as '1'
            generate_all(n-1);  //generate all combinations for other n-1 positions.
    }
}

这个问题就像问汽车和汽车有什么区别一样DeLorean https://en.wikipedia.org/wiki/DMC_DeLorean.

在递归函数中调用自身直到达到基本情况。

在回溯中,您使用递归来探索所有可能性,直到获得问题的最佳结果。

可能有点难以理解,我附上一些文字here https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html:

“从概念上讲,你从一棵树的根部开始;这棵树可能有一些好的叶子和一些坏的叶子,尽管这些叶子可能都是好的或都是坏的。你想要得到一个好的叶子。在每个节点,从根开始,选择要移动到的子节点之一,并一直这样做,直到到达叶子。

假设你遇到了一片坏叶子。您可以通过撤销最近的选择并尝试该组选项中的下一个选项来回溯以继续搜索好叶子。如果您没有选择,请撤销使您到达此处的选择,并在该节点尝试另一个选择。如果你最终没有选择,就找不到好的叶子。”

这需要一个例子:

您的代码只是递归,因为如果结果不符合您的目标,您将永远无法返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

回溯和递归的区别? 的相关文章

  • 为什么 .Net 词典中的条目是按加法顺序排列的?

    我刚刚看到这种行为 我对此感到有点惊讶 如果我向字典中添加 3 或 4 个元素 然后执行 For Each 来获取所有键 它们将以我添加的顺序出现 这让我感到惊讶的原因是字典内部应该是一个哈希表 所以我希望事情能以任何顺序出现 按键的哈希排
  • 嵌套列表递归python的序列

    给定一些数字 n 我想生成一个大小为 n 的列表 其中以下示例显示列表中的第 n 个元素应该如何 对于 n 0 返回 对于 n 1 返回 对于 n 2 返回 对于 n 3 返回 基本上 它采用先前的列表并将它们附加到新列表中 我尝试过以下方
  • 二叉堆对于优先级队列的优点?

    看来我错过了一些非常简单的东西 优先级队列的二进制堆与快速排序的值数组相比有什么优势 在这两种情况下 我们将值保存在数组中 插入的时间复杂度为 O logN 删除最大的时间复杂度为 O 1 在这两种情况下 给定元素数组的初始构造都是 O N
  • 如何在 dijkstra 算法中以 O(log n ) 时间更新优先级队列中的键?

    过去一周我一直在研究 dijkstra 算法 我在 java 中有正确的运行代码 它使用数组来计算标准 findMin 函数 该函数为您提供距离最小的顶点 显然它是 O n 现在我希望使用优先级队列 最小堆 来实现它 我的思考过程是 whi
  • 如何用模板参数包的内容填充数组?

    我嵌套了与 VS 2015 一起使用的部分专用模板代码 直到我发现它不符合标准 https stackoverflow com q 3052579 2747466 我希望如此 所以我扭曲了我的代码来克服前一个问题 并且that one ht
  • c中使用递归的strlen函数

    我对递归主题很陌生 我一直在尝试使用递归编写 strlen 函数 这就是我尝试过的 int strlen char str int i if str i 0 return i 1 return strlen str i 我尝试了一些非常相似
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • 哪个更快?按引用传递与按值传递 C++

    我认为按引用传递应该比按值传递更快 因为计算机不复制数据 它只是指向数据的地址 但是 请考虑以下 C 代码 include
  • 什么时候使用哈希表?

    什么情况下使用哈希表可以提高性能 什么情况下不能 哪些情况不适合使用哈希表 什么情况下使用哈希表可以提高性能 什么情况下不能 如果您有理由关心 请使用哈希表和您正在考虑的其他任何内容来实现 将您的实际数据放入其中 并衡量哪个性能更好 也就是
  • php 删除特定文件夹及其所有内容

    我正在使用 php 删除包含已删除帖子图像的文件夹 我正在使用下面的代码 这是我在网上找到的并且做得很好 我想知道当一个文件夹中有其他文件夹时 如何只删除其中的特定文件夹 当我使用下面的代码时 如何才能做到这一点 使用 dev images
  • 在 Python 中进行模糊键查找的最佳方法?

    我遇到一个问题 我需要在哈希映射中进行模糊查找 即返回与最接近查询的键相对应的值 在我的例子中是通过 Levenshtein 距离测量的 我目前的方法是子类化dict使用特殊的查找方法计算所有键的编辑距离 然后返回得分最低的键的值 基本上是
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • Python最大递归,关于sys.setrecursionlimit()的问题

    我有一个问题sys setrecursionlimit 来自蟒蛇docs https docs python org 2 library sys html sys setrecursionlimit这个函数 将Python解释器堆栈的最大深
  • Data.Sequence 中的 inits 和 tails 如何工作?

    Louis Wasserman 编写了当前的实现inits and tails in Data Sequence 他表示它们非常高效 事实上 只要查看代码 我就可以看到 无论它们在做什么 它们都是以干净 自上而下的方式进行的 这往往会给惰性
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 需要使用 pyparsing 制作递归解析器的帮助

    我正在尝试使用 python pyparsing 进行解析 我在制作递归解析器时陷入困境 让我解释一下问题 我想要计算元素的笛卡尔积 语法是 cross elements element 我用更具体的方式 cross a c1 or cro
  • 如何计算数据框中按另一列的列值分组的一列的连续字符串值?

    我有以下数据框 Levels Labels Confidence 0 Hands 0 8 0 Leg 0 7 0 Eye 0 9 1 Ear 0 9 1 Eye 0 8 2 Hands 0 9 2 Eye 0 8 3 Eye 0 8 我想检
  • 合并xml文档

    我遇到的所有关于合并 XML 文档的解决方案都无法实现我的愿望 让我解释 XML 文档 1 a b title Original Section b title Original Child Section b b title Origin
  • Python如何处理无限递归?

    因此 在使用 Python 时 我注意到程序的堆栈大小基本上没有限制 继续对数字执行幂运算 即使在达到数千位之后 精度仍然保持完美 这让我想知道 如果我不小心进入了Python的无限递归循环怎么办 编译器会注意到并抛出堆栈溢出错误吗 或者程

随机推荐

  • 如何在 C++ 中从基类构造函数调用派生类方法? [复制]

    这个问题在这里已经有答案了 我有一个基类和两个派生类 基类构造函数在调用时应计算一些属性 尽管这些属性取决于派生类的详细信息 为了避免在每个派生类构造函数中重新编码相同的步骤 我在基类构造函数中对这些步骤进行编码 如下例所示 问题是 当我这
  • 使用 UIImagePickerController 时 iOS 10 错误 [access]

    我正在使用 XCode 8 并使用 iOS 10 2 Beta 进行测试 我已将 Photos PhotosUI 和 MobileCoreServices 框架添加到项目中 非常简单的代码 import
  • 在客户端访问IE8中文件输入的文件数据?

    是否可以获取在文件输入中选择的实际文件数据 我正在尝试执行以下代码 但 this files 不包含我期望的文件数据 在 Chrome 中确实存在 document getElementById txtFileInput onchange
  • Objective-C中使用GCD的dispatch_once创建单例

    如果您可以定位 iOS 4 0 或更高版本 使用GCD 这是在Objective C 线程安全 中创建单例的最佳方式吗 instancetype sharedInstance static dispatch once t once stat
  • 如何在自定义 Cordova 插件中包含多个 AAR 文件?

    我是科尔多瓦开发的新手 我需要编写一个引用两个 aar 文件的自定义插件 我可以将第一个 aar 文件添加到插件中 但是我对添加第二个 aar 文件有一些疑问 我可以在同一个自定义插件中添加第二个 aar 文件吗 或者我是否需要创建另一个自
  • 如何在 T-SQL 中计算 GROUP BY 行数

    我有一个 SQL 查询 它执行 GROUP BY 将包含相同 Player id 但不相同 Game id 的所有行合并在一起 SELECT p Player id p Name p Position SUM s Goals AS goal
  • 如何通过电视马拉松将消息转发给其他联系人

    当我收到联系人发来的消息后 如何立即将消息转发到另一个聊天室 我创建这个示例只是为了测试路由 但它不起作用 usr local bin python3 from telethon import TelegramClient events a
  • 如果进程以参数启动,Ruby readline 将失败

    我遇到了最奇怪的问题 下面的代码工作正常 require json require net http h Net HTTP new localhost 4567 while l gets chomp res h post api v1 se
  • Varargs Kotlin Java 互操作无法正常工作

    对于 makeSceneTransitionAnimation 有两个静态函数 public static ActivityOptionsCompat makeSceneTransitionAnimation Activity activi
  • Javascript键盘输入过滤

    有没有人有一个有效的动态 JavaScript 输入过滤器 可以限制跨多个浏览器的文本输入 我在网上看到了多个示例 但大多数似乎都有缺陷或缺乏多浏览器支持 我当前的尝试发布在下面 但在 Firefox 下移动数字失败 而且我还没有尝试过其他
  • Swift Actor 中发生数据争用

    我使用 Thread Sanitizer 在 Swift 应用程序中发现了数据争用 因此我第一次尝试通过转换有问题的数据来修复争用条件class to an actor 竞争造成的崩溃似乎已经消失 但 Thread Sanitizer 仍然
  • Angular 9 引入了需要加载的全局“$localize()”函数

    我在新的角度项目设置中遇到以下错误 已安装的软件包及其版本 https i stack imgur com 2Fb18 png 错误错误 未捕获 承诺 错误 它看起来像你的 应用程序或其依赖项之一正在使用 i18n 角9 推出了全球 loc
  • 将大流转换为字符串时内存不足

    我正在尝试将大流 4mb 转换为字符串 最终将其转换为 JSON 数组 当流大小很小 以 KB 为单位 时 一切正常 当它开始处理 4mb 流时 它就会耗尽内存 下面是我用来将流转换为字符串的方法 我几乎尝试了所有方法 我怀疑问题出在 wh
  • 无法初始化代理 - 无会话

    我有一个错误 看起来像这样 无法初始化代理 无会话 我正在使用 java hibernate 和 spring 尝试生成 PDF 文档时出现此错误 我正在按照后续步骤动态生成它并将其存储在数据库中 我通过 POST 方法向应用程序发送了请求
  • 使用 wget、curl 时 SSL 连接失败,但使用 firefox 和 lynx 时成功

    我在通过自动脚本访问该网站时遇到问题 如果我从浏览器 chrome firefox 甚至 lynx 都可以工作 查看 一切都可以 我如果尝试从 PHP fsockopen wget 或 curl 加载它 它会抱怨 警告 stream soc
  • 连接到 R 中的 Azure 表存储

    我一直在尝试连接到 R 中的 Azure 表存储 对于使用 R 连接到表存储的 Rest API 的用户 Google 搜索没有返回任何结果 文档是here https learn microsoft com en us rest api
  • 字符串替换方法不起作用[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions public static Stri
  • Jenkins + Python + MSBuild = 无 ANSI 颜色

    Short 如何获取从 Jenkins 运行的 MSBuild 的颜色 Long 我有一个很好的 Python 构建脚本 它使用 pyColors 模块将漂亮的输出打印到控制台 当我从 CMD 运行脚本时 我从脚本中获取颜色 从 MSBui
  • AVD 无法在屏幕上移动

    我刚刚创建了一个 AVD 但启动屏幕是空白的 无法在屏幕上移动 我的设置如下 安卓5 0 1手臂 比例 设备上 4dp 内存 512MB 虚拟机堆 128 MB 我认为您的 AVD 窗口的标题可能移至屏幕外 无法使用鼠标将其向下拖动 您可以
  • 回溯和递归的区别?

    回溯和递归有什么区别 这个程序是如何运作的 void generate all int n if n lt 1 printf s n ar else ar n 1 0 fix n th bit as 0 generate all n 1 g