объясните как работает эта рекурсия
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(SumCyfr(477));
}
static long SumCyfr(long a) // рекурсивный метод
{
if (a == 0)
return 0;
else
return SumCyfr(a / 10) + a % 10;
}
}
}
Заранее скажу
я понимаю, что %10 дает последнее число и /10 отсекает последнее число(в целочисленном типе), но не могу почему-то понять как это работает даже с отладкой, скорее всего упускаю что-то очевидное.
Ответы (2 шт):
Автор решения: Andrew
→ Ссылка
Учимся понимать код при помощи дебага:
- ставишь брейппоинт перед первым вызовом функции
- запускаешь под дебагом (ф5, НО НЕ Ctrl+F5!!! )
- смотришь на все значения переменных
- нажимаешь ф11
- Повторять пункты 3 и 4 пока не поймешь как все работает
Если все равно непонятно -- можно ввести 4 переменные посредника - каждая переменная на одно атомарное(максимально простое) действие.
static long SumCyfr(long a) // рекурсивный метод
{
if (a == 0)
return 0;
else
{
var a1 = a / 10;
var a2 = SumCyfr(a1);
var a3 = a % 10
var rez = a2 + a3;
return rez;
}
}
и повторить все действия с дебагом.
Автор решения: Битный овощ
→ Ссылка
477%10 + 47%10 + 4%10 + 0(т.к. 4/10=0)= 18
при a = 0 функция заканчивается. В другом случае оно возвращает последнюю цифру числа a + суммуцифр(a/10) и так по кругу, пока числа a не станет ровно нулю.