在 PHP 中检测数组中的循环

3
我正在运行一个简单的脚本,通过Collatz猜想公式将一个整数输入,并将每个步骤的输出添加到一个数组中。
我想使用一个函数来检测数组中是否有循环,使用Floyd算法。尽管我觉得我做得不错,但似乎并不正确。此时我收到错误信息Trying to get property 'next' of non-object in C:\xampp\htdocs\educom\week3\functions.php on line 12
请参见我的代码。非常感谢您提供任何反馈!
    include("functions.php");

    $n = $_POST['number'];
    $step = 0;
    $reeks1 = array();
    $cycle = 0;
    echo "Your entry is: ". $n ."<br><br>";


    while($n!==1 && $cycle==0){
        $cycle = detect_cycle(array($reeks1));
            if($n % 2 == 0){
                $n = $n / 2;
                array_push($reeks1, "$n");
                $step++;
                echo $step .": ". $n ."<br>";
            }else{
                $n = ($n * 3) + 1;
                array_push($reeks1, "$n");
                $step++;
                echo $step .": ". $n ."<br>";
            }
        }

functions.php:

function detect_cycle($node){
    if ($node==NULL){
        return FALSE;
    }
    $turtle = $node;
    $rabbit = $node->next;
    while($rabbit != NULL){
        if($rabbit === $turtle){
            return TRUE;
        }elseif($rabbit->next == NULL){
            return FALSE;
        }else{
            $turtle = $turtle->next;
            $rabbit = $rabbit->next->next;
        }
    }
    return FALSE;
}

1
你的$node里有什么? - deEr.
你不能只使用 ->next 来获取数组中的下一个元素。 - Nigel Ren
当您使用->时,PHP会认为您正在引用对象的属性。如果您愿意,可以使用$node [0]或$node [1]。 - Yasitha
脚本将无限数量的项添加到数组中。如果我不知道有多少项,我就不能硬编码要从哪个索引获取。难道没有一种方法可以获取数组中的下一项吗? - Vincent
1个回答

0

看看这个。重要的是,我不知道这是否符合你的理论,但如果你像这样使用它,它不会给你错误。

function detect_cycle($node){
    if ($node==NULL){
        return FALSE;
    }
    $turtle = $node;
    $rabbit = $node[0];
    while($rabbit != NULL){
        if($rabbit === $turtle){
            return TRUE;
        }elseif($rabbit[0] == NULL){
            return FALSE;
        }else{
            $turtle = $turtle[0]; // use the number of the element key starting from 0
            $rabbit = $rabbit[0][1];
        }
    }
    return FALSE;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接