微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归算法的调试

如何解决递归算法的调试

您需要就为什么认为算法会终止形成理论。理想情况下,将理论证明为数学定理。

您可以查找问题状态的函数,该函数在每次递归调用时都会减少。例如,请参阅以下来自维基百科的有关Ackermann函数的讨论

A(m,n)的求值总是终止可能不是立即明显的。但是,递归是有界的,因为在每个递归应用程序中,m减小,或者m保持不变,n减小。每次n达到零时,m都会减小,因此m最终也会达到零。(从技术上讲,在每种情况下,对(m,n)的对在字典上的顺序都按对减小,这是一个很好的排序,就像单个非负整数的排序一样;这意味着一个排序不能下降但是,当m减小时,n可以增加多少没有上限,并且通常会大大增加

那就是您应该考虑将其应用于算法的推理类型。

如果找不到任何方法来证明算法终止,请考虑寻找可以证明其终止的变体。并非总是能够确定任意程序是否终止。诀窍是编写可以证明终止的算法。

解决方法

我的问题是是否有一些调试复杂的递归算法的聪明方法。假设我们有一个复杂的例子(在每个“嵌套迭代”中递归计数器都减少时,这不是简单的情况)。

我的意思是在可能发生循环时类似图的递归遍历。

我需要检查我是否在某处没有无限循环。而且仅使用调试器执行此操作并不能给出肯定的答案(因为我不确定算法是否处于无限循环中,还是只是按需进行处理)。

没有具体的例子很难解释。但是我需要的是…

“要检查复杂的递归算法中是否不会发生无限循环”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。