<分区>
今天我做了一个在 php 中使用递归的方法,并对它产生了兴趣。递归究竟能解决什么问题?我们可以为哪些事情使用递归?
我开始在网上搜索它,搜索和搜索,但我找不到任何东西。
所以我想问,我可以用递归做什么?
有一些限制吗?我们不能用递归做但用标准循环可以做的事情?我想知道我是否可以经常在我的代码中正常使用 now 递归。
<分区>
今天我做了一个在 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/