#C Рекурсия с делением или рекурсия с конвертацией int в string
Сделал два метода по задаче, делающие одно и тоже (подсчитывают сумму цифр числа int).
Первый - самый логичный (по виду) - пришел на ум после проработки второго метода и освежения в голове школьного курса математики:
int SumOfNumber(int number)
{
if(number == 0)
return 0;
return number % 10 + SumOfNumber(number / 10);
}
Второй метод - пришел на ум изначально, но, по сравнению с первым методом, гораздо больше действий - сначала int перевожу в string, затем делаю вложенный метод с рекурсией в исходном методе, где перевожу элемент string обратно в int.
int SumOfNumber1(int number)
{
string? temp = Convert.ToString(number);
return SumOfNumber2(temp);
int SumOfNumber2(string temp, int i = 0)
{
if (i >= temp.Length)
return 0;
return Convert.ToInt32(temp[i].ToString()) + SumOfNumber2(temp, i + 1);
}
}
После этого решил узнать, какой из методов более затратный для процессора. Нагуглил, что операция деления достаточно затратна для процессора. Получается, второй метод оптимальней использовать, несмотря на велосипед с конвертацией int и большим количеством вызовов в стеке?
Ответы (1 шт):
Конвертация в строку происходит не каким-то волшебным образом, а с помощью того же деления и взятия остатка, так что быстрее не будет