@New-Developer
Изучаю JavaScript

Рекурсивное умножение разрядов целого числа, как узнать количество вызовов функции?

Здравствуйте.
Программа должна реализовать поразрядное умножение целого положительного числа, пока не останется 1 разряд и выдать количество шагов до этого результата. Пример:
99999=>59049=>0===2 шага // 9*9*9*9*9=>5*9*0*4*9=>0;
13=>3===1 шаг // 1*3=>3;
999=>729=>126=>12=>2===4 шага // 9*9*9=>7*2*9=>1*2*6=>1*2=>2;
7=>7===0 шагов //
Можно ли в рекурсию вставить счетчик вызовов функции ?

let steps = 0;
function umnozhenie(x) {
    steps += 1;
    x = String(x).match(/[0-9]/g).map(Number).reduce((a, b) => a * b);
    if (x >= 10) { x = umnozhenie(x); };
    return steps;
}


Программа показывает неправильные результаты при больших числах. Но если в return ставлю саму функцию, то получаю правильное значение конечного разряда.
С циклом работать не умею.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Проверяем число, если однозначное - возвращаем 0; в противном случае возвращаем сумму единицы и результата рекурсивного вызова:

const multiply = num =>
  num > 9
    ? 1 + multiply([...`${num}`].reduce((acc, n) => acc * n))
    : 0;
Ответ написан
Комментировать
@Karpion
Если человек не умеет работать с циклами, то браться за рекурсию ему не следует.
В данном случае лучше всего - цикл while(x>9) { ... }. Внутри цикла надо использовать операции "mod 10" (остаток отделения на десять - для получения последней цифры) и "div 10" (остальная часть числа) - и так, извлекая цифры по очереди, перемножать их.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы