Обнаружение цикла в массиве Переполнение стека

Я бегу простой скрипт, который ставит целое число через формула гипотезы Коллатца и добавляет вывод каждого шага в массив.

Я хочу использовать функцию, чтобы определить, есть ли цикл в массиве, используя Алгоритм Флойда. И хотя я чувствую, что я не делаю плохую работу, я, кажется, не понимаю это правильно. В этот момент я получаю ошибку 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;
}

3

Решение

Проверь это. ВАЖНО Я не знаю, это в соответствии с вашей теорией. но это не даст вам ошибок, если вы будете использовать это.

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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector