是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
Is it always possible to rewrite a program written using recursion, to one that does not use recursion in C++ and what is the performance view point?
只是想在这个问题上做一些 gyan,从性能的角度来看,也请解释一下堆栈和阿克曼函数如何/为什么可能参与其中,是否可以每次使用它C++? 因为在我看来,每个递归程序确实有一个非递归实现。
您可以非递归地实现几乎所有递归程序,但在某些程序中,使用递归可能会带来更好的性能。如果你真的想确保你的解决方案是最快的,我会使用 chrono 库并创建 2 个时间戳来衡量递归函数与非递归函数需要多长时间。
大多数涉及循环的问题都可以使用递归来解决。 因此,它们被分组为一种特殊类型,即原始递归。 然后是不属于这一类的问题。其中一个例子是著名的阿克曼函数。有一些问题,递归可能是一种更好的方法,例如河内塔问题。如果没有递归,解决它将非常困难。 同样,有时你最好使用循环,因为递归会为每个进程调用一个堆栈,很多时候会重复计算同一件事,有时可能会因为堆栈的大小而出现堆栈溢出。例如,当您尝试使用递归实现斐波那契级数时。因此,这取决于您要采取哪种方法的问题。递归可以通过用记忆来补充它来优化,您将在备忘录中保存计算(因此称为记忆(,以便此后无需计算它。
互联网上有大量的资源可以讨论递归与迭代讨论,例如这里和这里。
对于像 C/C++ 这样的语言,只有当满足以下某些(而不是大多数(条件时,我才会选择递归:
-
只有在完成整个过程后才需要结果
-
每次迭代的重复动态内存分配或调整大小是 相当苛刻
-
算法复杂性导致迭代实现出现问题
性能:在大多数情况下,迭代可能是高性能的,但您必须对这两种实现进行计时才能做出决定。
希望这有助于您做出决定
相关文章:
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 递归程序的执行流程
- 递归程序获得勒让德多项式
- 当有 2 个或更多递归函数写入 togeather 时,程序如何执行?
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 这个简单的程序如何不表示递归?
- 执行递归函数时 C++ 应用程序崩溃
- 如何理解哪个递归函数程序需要
- 以下递归程序的最后一行是如何工作的
- 如何使用mongocxx c ++驱动程序递归生成Mongodb文档?
- 如何计算递归程序的步骤
- C++回文创建者递归程序
- 多线程递归程序 c++
- 将我的二叉搜索程序改进为递归程序
- 为什么我在计算帕斯卡三角形元素时在递归 C 程序中出现堆栈溢出错误
- 如何使C++递归程序终止
- 基本递归程序中的Bug,可以看出问题所在吗
- c递归程序问题
- 这个在c++中查找阶乘的递归程序背后的逻辑是什么?
- 需要帮助我的递归程序来反转输入