gpt4 book ai didi

php - 函数变成死循环

转载 作者:行者123 更新时间:2023-12-04 00:05:10 24 4
gpt4 key购买 nike

我用 php 编写的函数有问题。如您所见,该函数使用自身返回值数组。

    public function getRepeat($day = "array")
{
if ($day == 'array')
{//Return an array with the repeated days as values
foreach (array(1,2,3,4,5,6,0) as $value)
{
if ($this->getRepeat($value))
{
$returnArray[] = $value;
}
}
return $returnArray;
}
else if (in_array($day, array(1,2,3,4,5,6,0) ))
{
if ($day == 1)
return $this->repeat1;
if ($day == 2)
return $this->repeat2;
if ($day == 3)
return $this->repeat3;
if ($day == 4)
return $this->repeat4;
if ($day == 5)
return $this->repeat5;
if ($day == 6)
return $this->repeat6;
if ($day == 0)
return $this->repeat0;
}
}

一旦它调用自己来获取每个变量,它就会变成一个无限循环。

这是什么原因造成的?

最佳答案

您必须始终考虑分两部分编写递归函数:

  1. 基本情况——在什么时候停止递归并返回一个值(即列表是否为空)
  2. 递归情况——如何再次调用函数以及输入与上次调用有何不同(即是否发送列表的尾部)

确保这两个规则成立应该导致递归函数在输入有效的情况下终止。

这是一个递归的解决方案——但是它是在 Java 中:)

    public static void main(String[] args) {

List<Integer> testVals = new ArrayList<Integer>();
testVals.add(0);
testVals.add(1);
testVals.add(2);
testVals.add(3);
testVals.add(4);
testVals.add(5);

List<Integer> toMatch = new ArrayList<Integer>(testVals);

List<Integer> matches = new ArrayList<Integer>();

repeatRec(testVals, matches, toMatch);

System.out.println("Matches " + matches);
}

public static void repeatRec(List<Integer> toTest, List<Integer> matches, List<Integer> toMatch) {


if (toTest.isEmpty()) {
//we are done
return;
} else {

Integer head = toTest.get(0);

if (toMatch.contains(head)) {
matches.add(head);

}

//could have else here if we're only interested in the first match
repeatRec(toTest.subList(1, toTest.size()), matches, toMatch);
}
}

关于php - 函数变成死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com