Шалом алейкум! Из дерева в функцию заноситься ветка (которая представляет собой скобку из уравнения), нужно проверить нет ли в ней других скобок и если есть то вернуть ФОЛС, если нет то соответственно ТРУ. PHP: function finalBrackets($tree){ for($i=0;$i<count($tree);$i++){ if ( is_array($tree[$i])){ if($i==2 && ($tree[$i][1]=='+'||$tree[$i][1]=='-')){ return false; } else { finalBrackets($tree[$i]); } } } return true; } Всегда возвращает ТРУ, хотя заходит в условие где return false. Видимо это связано с множеством запусков функции из-за рекурсии, который один хер будут продолжаться до конца, даже если встретят return false. И в итоге мне вернет значение, которое будет именно в последнем запущенном экземпляре??? В общем как вернуть фолс по условию?
true если ничего не нашел, то бишь просто прошелся по всему дереву. Если хоть раз удовлетворено условие, то вернуть фолс PHP: if($i==2 && ($tree[$i][1]=='+'||$tree[$i][1]=='-')){ return false; }
@Познающий php, можешь дать входные данные? --- Добавлено --- PHP: function finalBrackets($tree){ $result = true; for($i=0;$i<count($tree);$i++){ if ( is_array($tree[$i])){ if($i==2 && ($tree[$i][1]=='+'||$tree[$i][1]=='-')){ $result = false; break; } else { finalBrackets($tree[$i]); } } } return $result; } Попробуй так, может поможет.
PHP: $aa = array(array(array(4,'*',7),'*',array(-2,'+',array(5,'*','x'))),'+',array(array(2,'*','x'),'*',7)); неа, не пашет. тру выдает
PHP: function finalBrackets($tree) { for ($i = 0; $i < count($tree); $i++) { echo "итерация".$i . "\n"; if (is_array($tree[$i])) { if ($i == 2 && ($tree[$i][1] == '+' || $tree[$i][1] == '-')) { echo "конец\n"; return false; } else { echo "рекурсивный вызов\n"; finalBrackets($tree[$i]); } } } return true; } При отладке используя входные данные которые три приложил, на выходе получаю вот что.(не знаю, отлаживал ли ты) Вникать пока нету времени, еще гляну, можете вывод тебе что либо скажет. Код (Text): итерация0 рекурсивный вызов итерация0 рекурсивный вызов итерация0 итерация1 итерация2 итерация1 итерация2 конец итерация1 итерация2 рекурсивный вызов итерация0 рекурсивный вызов итерация0 итерация1 итерация2 итерация1 итерация2