递归和循环是等价的吗?

发布于 2022-09-02 11:31:34 字数 159 浏览 6 评论 0

具体的说就是,
是否所有的递归都能用循环改写?
反之,是否所有的循环都能用递归改写?

主要是突然想到,c++模板中,因为所有的变量都是常量,也就是没有所谓的循环,只能用递归,但它本身又是图灵完全的,这就意味所有循环做的任务都可以改用递归来完成。
那么反之是否也成立呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

骄兵必败 2022-09-09 11:31:34

Image

一张图解决你的疑惑

如果没解决继续追问

飘然心甜 2022-09-09 11:31:34

理论上是可以, 但实际上递归取决于语言/系统支持的最大堆栈深度, 如果超过这个上限, 就会出现 stack overflow

2022-09-09 11:31:34

是否所有的递归都能用循环改写?

是. 可以手工操作栈来模拟递归.

反之,是否所有的循环都能用递归改写?

是. 参考函数式编程语言.

甜宝宝 2022-09-09 11:31:34

在可计算性的意义上是
实际的计算过程不是

动听の歌 2022-09-09 11:31:34

理论上是可以,但是实际中却不是:一般来说递归在任何情况下都可以改写成循环,而且一般效率还会有一定的提升,但是耗费的资源可能会变多。反之,一般的循环不推荐写成递归,正如上面回答的,超过最大栈深度会有stack over folw ,而且时间会慢很多。最简单的例子是菲波那切数列,当递归到50附近时,时间已经无法估量了。。。。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文