php - 使用递归可以解决什么问题?

标签 php algorithm loops recursion

<分区>

今天我做了一个在 php 中使用递归的方法,并对它产生了兴趣。递归究竟能解决什么问题?我们可以为哪些事情使用递归?

我开始在网上搜索它,搜索和搜索,但我找不到任何东西。

所以我想问,我可以用递归做什么?

有一些限制吗?我们不能用递归做但用标准循环可以做的事情?我想知道我是否可以经常在我的代码中正常使用 now 递归。

最佳答案

我可以使用递归做什么?

解决递归问题。亲子问题是最常见的问题,其中每个 child 都可以再次成为 parent 本身。

function doSomethingWithNode($node) 
{
    // Do something with $node

    // Loop over all childs, and run this code for those childs too, and for those childs, and for those childs, and ...
    foreach($node->getChilds() as $child) {
        doSomethingWithNode($child);
    }
}

doSomethingWithNode($rootNode);

有一些限制吗?

是的。 PHP(和其他编程语言)跟踪哪个代码调用哪个函数,因此它知道函数返回后从哪里继续。这称为调用堆栈。将新条目添加到调用堆栈 将占用一些内存和一些时间。当您有很多(数百万)次迭代时,主要是第一个 CAN 会导致问题。

根据您的安装,调用堆栈 甚至可能受到限制。默认情况下不是。通过安装 xdebug-extension,它给你最多 100 个嵌套调用(默认情况下,可以在配置中更改)。在这些设置中,它将导致 fatal error ( example )。

我们不能用递归做但用标准循环我们可以的事情?我想知道我是否可以经常在我的代码中正常使用 now 递归

由于上述限制,应谨慎使用递归。当你可以用普通的 while 或 for 循环解决它时:使用普通循环。大多数情况下,它会使代码更易于阅读。

当您关心可移植性时(例如,在编写开源项目时),您可能希望牢记 xdebug-users。

关于php - 使用递归可以解决什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393425/

相关文章:

php - 创建搜索字段

php - WordPress 中的页面重定向

algorithm - O(n sqrt(n)) 算法如何在给定数字数组的情况下列出所有可能的总和?

algorithm - 如何根据出现频率对值进行聚类?

python - 如何将多个列表值作为函数参数传递?

php - 如何在 Laravel 中手动返回或抛出验证错误/异常?

javascript - 注册成功后重定向

javascript - NxN 棋盘的 TicTacToe 获胜逻辑

php - 遍历文本文件并检查文件是否存在于服务器上

python - 如何让 Python 同时对列表中的所有项目进行循环?