Метод с рекурсией
Следующий код печатает цифры данного числа. Работает без проблем, все правильно. Когда я прогоняю его шаг за шагом он срезает цифры один за другим до последней цифры (5), печатает его, и возвращается к вызывающему методу. В этот момент n=5. При следущей рекурсии он заходит в метод с n=56, n=567, и тд. здесь я не понимаю, как рекурсия начинает добавлять цифры в обратном порядке. Если-б кто-нибудь смог мне объяснить пожалуйста. Я понимаю как эти цифры потом распечатываются.
static void Main(string[] args)
{
Console.Write("\n\n Recursion : Display the individual digits of a given number :\n");
Console.Write("------------------------------------------------------------------\n");
int num = 567234;
Console.Write(" The digits in the number {0} are : ", num);
separateDigits(num);
Console.ReadKey();
}
static void separateDigits(int n)
{
if (n < 10)
{
Console.Write("{0} ", n);
return;
}
separateDigits(n / 10);
Console.Write(" {0} ", n % 10);
}
Ответы (2 шт):
Вам нужно понять для начала 2 операции
/ - целочисленное деление
% - остаток от деления
далее
if (n < 10) // условие для остановки рекурсии
{
Console.Write("{0} ", n);
return;
}
separateDigits(n / 10); // разделить n на 10 и передать рекурсивно
Console.Write(" {0} ", n % 10); // напечатать остаток от деления
Так ват печатает в обратном порядке потому что функция у ходит в рекурсию до вывода значения остатка. Если поменять местами
Console.Write(" {0} ", n % 10); // напечатать остаток от деления
separateDigits(n / 10); // разделить n на 10 и передать рекурсивно
то получите прямой порядок
Сейчас понял где я недопонимал. При рекурсии мы последовательно идем во внутр метода, снова и снова, до последней цифры. Как в матрешках. При этом оставляя на каждом уровне различные значения n, так как они имеют различные scop-ы. Таким образом, ответ на мой вопрос n равен 56 потому,что рекурсия пошла обратно на верхний метод, где мы оставили n=56. Aziz Umarov, катта рахмат за то, что помогли мне это понять.