php迭代一个函数,php – 将函数从递归转换为迭代

我有这个函数,我写的是非常慢,因为PHP不能很好地处理递归.我试图将它转换为while循环,但我无法绕过如何做到这一点.

谁能给我一些提示?

public function findRoute($curLoc, $distanceSoFar, $expectedValue) {

$this->locationsVisited[$curLoc] = true;

$expectedValue += $this->locationsArray[$curLoc]*$distanceSoFar;

$at_end = true;

for($i = 1; $i < $this->numLocations; $i++) {

if($this->locationsVisited[$i] == false) {

$at_end = false;

if($expectedValue < $this->bestEV)

$this->findRoute($i, $distanceSoFar + $this->distanceArray[$curLoc][$i], $expectedValue);

}

}

$this->locationsVisited[$curLoc] = false;

if($at_end) {

if($expectedValue < $this->bestEV) {

$this->bestEV = $expectedValue;

}

}

}

解决方法:

我不打算转换你的代码,但你可以通过创建一个堆栈将一个recusive函数转换为迭代函数:

$stack= array();

而不是调用$this-> findroute(),将您的参数推送到此堆栈:

$stack[] = array($i, $distanceSoFar + $this->distanceArray[$curLoc][$i], $expectedValue);

现在将函数中的所有内容基本上包围在一个while循环中,在启动它之后耗尽堆栈:

while ($stack) {

// Do stuff you already do in your function here

标签:php,recursion,iteration

来源: https://codeday.me/bug/20190724/1519304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值