PHP: function sqInRect ($lng, $wdth) { if ($lng == $wdth) { return null; } $S = $lng * $wdth; $sum = 0; $square = min ($lng, $wdth) ** 2; while (1) { $sqrt = sqrt ($square); $diff = $S - $sum; $i = 0; $floor = floor ($diff/$square); while ($i < $floor) { $sum += $square; $arr [] = $sqrt; $i++; } if ($sum == $S) { return print_r ($arr); } $diff = $S - $sum; do { $diff--; } while (is_float (sqrt ($diff))); $square = $diff; } } sqInRect (3,5); Почему-то, когда функция выполняется, цикл do...while обрабатывается больше 60 сек в строках 23 и 24. Хотя я прогнал аргументы (3 и 5), и всё должно быть нормально. Но я не уверен
А зачем вообще такую хрень писать? Вспоминаем алгебру, область определения квадратного корня. Квадратный корень определён для всех значений больше или равно нуля. А для отрицательных чисел уже возвращает комплексный результат (функция sqrt этого не умеет). --- Добавлено --- Что вообще пытаешься сделать таким способом?
Я уменьшал целое число, пока не нашёл бы целое число, которое при выносе из корня возвращало бы целое значение, но если бы оно возвращало дробное значение, цикл бы продолжался. Однако я не учёл тот факт, что sqrt всегда возвращает дробное значение (даже если оно выглядит, как целое) и попал в ловушку.