如何解决递归可以有无限循环吗?
我听到人们说很多时候递归可能是一个“无止境的循环”,但这并不是说仅适用于循环完成的事情。对这样的递归说“无限循环”是否正确和正确?说“无尽递归”会更好吗?
解决方法
尾部递归可以视为迭代循环。这是唯一不会立即以堆栈溢出错误结束的无限递归类型。
如果您在兼容的ECMAScript 2016实施中编写此代码
const test = (n) => test(n + 1);
test(0);
它将永远挂起并且永远不会导致堆栈溢出。浏览器会因为忙碌的循环而挂起,但永远不会出现堆栈溢出,因为尾部调用已优化为以下形式:
const test = (n) => {
while(true) {
n++;
}
}
test(0);
如果您将最下面的一个视为无限循环,则第一个不变。 如果这是C语言,那么两者都将使用gotos转换为非常相似的汇编代码,因为汇编既没有while循环,也没有函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。