[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: return в рекурсивной функции
fafle
Задача довольно тривиальная. Не могу понять одного, почему не отрабатывают return, в том плане, что выполнение функции продолжается и значение не возвращается.
Толи я матчасть не доковырял, толи не вижу элементарного, подсобите чем могете.

//assert(isCorrect('') === true);
//assert(isCorrect('()') === true);
//assert(isCorrect('{()}') === true);
//assert(isCorrect('{()}{}') === true);
//assert(isCorrect('(())') === true);
//assert(isCorrect('{({({({()})})})}') === true);
//assert(isCorrect('{(})') === false);

print_r(isCorrect('{()}'));




function isCorrect($string, $ar = '') {
//Если скобка открывающаяся заносим ее в начало массива "для сравнения"
//и вызываем фунцию для продолжения наполнения массива

if (substr($string, 0, 1) == '{' || substr($string, 0, 1) == '(') {
$ar = substr($string, 0, 1) . $ar;
isCorrect(substr($string, 1), $ar);


//в противном случае начинаем проверку соответствия
} else {


for ($i = 0; $i < strlen($ar); $i++) {
//если символы не n символ строки и массива не сооьветствуют возвращаем false
if (!(($ar[$i] == '{' && $string[$i] == '}') || ($ar[$i] == '(' && $string[$i] == ')'))) {
return false;
}
}

//ecли соответствие прошло, но в строке присутствуют символы вызывает повторно фуннкцию
if (strlen($ar) < strlen($string)) {
$string = (substr($string, strlen($ar)));
isCorrect($string);
// если соответствие прошло и в функции не осталось символов возвращаем true
} else {
return true;
}
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.