#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 шт):

Автор решения: MBo

Конвертация в строку происходит не каким-то волшебным образом, а с помощью того же деления и взятия остатка, так что быстрее не будет

→ Ссылка