Вывод количества вызовов рекурсивной функции

Задача такова: у меня есть функция, которая принимает на вход число, мне нужно разбить это число (если оно имеет больше 1 символа) на цифры и перемножить все эти цифры. Данное действие должно повторяться пока аргумент функции не станет одноразрядным числом. Ну и вывести мне нужно количество повторений этого алгоритма. То есть к примеру если функция принимает на вход 39 то нужно вывести 3, так как 3*9 = 27, 2*7 = 14, 1*4=4. Если принимает на вход 999 то 4, так как 9*9*9 = 729, 7*2*9 = 126,1*2*6 = 12,1*2 = 2 и тд. Для этой задачи я написал рекурсивный алгоритм. Вот и он:

static int count;
public static int Persistence(long n)
{
  count++;
  int position = 0;
  int[] array = n.ToString().Select(x => (int)Char.GetNumericValue(x)).ToArray(); //здесь я разделяю число на цифры
  if (n > 10)
      return Persistence(array[position] * array[position + 1]);
  return count;
}

public static void Main()
{
   Console.WriteLine(Persistence(4));
}

Моя проблема такова: алгоритм правильно работает только с двухразрядными числами, но вот если разрядов в числе больше, то алгоритм работает только с первыми двумя цифрами данного числа. Пример: если я введу число 999, то программа умножит первые две цифры, в итоге получится, что n = 81, мне же нужно чтобы все три девятки в этом числе перемножились и число n стало равно 729. Заранее спасибо за помощь.


Ответы (1 шт):

Автор решения: Андрей NOP

Ну, собственно, вы и написали перемножение только 2х цифр здесь:

return Persistence(array[position] * array[position + 1]);

Перемножить все:

var mul = array[0];
for (int i = 1; i < array.Length; ++t)
    mul *= array[i];
return Persistence(mul);

ну, или тоже самое с помощью Linq:

var mul = array.Aggregate((a, b) => a * b);
return Persistence(mul);
→ Ссылка