Задача:
Напишите функцию persistence, которая принимает положительный параметр num и возвращает его мультипликативное постоянство, то есть количество раз, которое вы должны умножить цифры в num, пока не дойдете до единственной цифры..
For example:
PHP:
скопировать код в буфер обмена
persistence(39) === 3; // because 3 * 9 = 27, 2 * 7 = 14, 1 * 4 = 4 and 4 has only one digit persistence(999) === 4; // because 9 * 9 * 9 = 729, 7 * 2 * 9 = 126, 1 * 2 * 6 = 12, and finally 1 * 2 = 2 persistence(4) === 0; // because 4 is already a one-digit number
Моё решение, которое не хочет выдавать что нужно:
Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
<?PHP function persistence(int $num) { //***Разбиваем число на цифры***_start $str = (string) $num; // преобразуем в строку $col = mb_strlen($num, "utf-8"); // считаем кол-во символов if($col == 1) return $num; // если 1 символ, то завершаем работу $intArr = []; // в массив запишем каждый символ(цифру) строки for($i = 0; $i < $col; $i++) { // запись в массив $intArr[] = (int)$str[$i]; } //***Разбиваем число на цифры***_end // ***Получаем произведение всех элементов массива*** $newArr = []; // здесь будет произведение лежать // Начинаем счёт и запись произведения for($i = 0; $i < $count; $i++) { if(empty($newArr)) $newArr[0 ] = $intArr[$i]; // заполняем при первом разе $newArr[0] else $newArr[0] *= $intArr[$i]; // считаем произведение } static $recNum = 1; // счётчик рекурсии // тестовая строка, для визуализации происходящего echo 'рекурсия №' . $recNum . '|кол-во символов:' . mb_strlen($newArr[0], "utf-8"). '|результат: ' . $newArr[0] . '|||'; $recNum++; persistence($newArr[0]); // рекурсимся, если более 2ух символов } else { return (int)$newArr[0]; // возврат, если 1 символ } } echo persistence( 999);
Цитата:
рекурсия №1|кол-во символов:3|результат: 729|||
рекурсия №2|кол-во символов:3|результат: 126|||
рекурсия №3|кол-во символов:2|результат: 12|||
Вопрос: почему на рекурсия №3 не происходит дальнейшего счёта (1 * 2 = 2)и ретурн не происходит? Спасибо
|