我为这个任务做了两种方法,它们做同样的事情(它们计算数字 int 的数字之和)。
第一个 - 最合乎逻辑的(在外观上) - 在制定了第二种方法并刷新了学校数学课程的负责人之后浮现在脑海中:
int SumOfNumber(int number)
{
if(number == 0)
return 0;
return number % 10 + SumOfNumber(number / 10);
}
第二种方法 - 最初想到的,但是,与第一种方法相比,有更多的动作 - 首先我将 int 转换为字符串,然后我在原始方法中使用递归创建了一个嵌套方法,其中我将字符串元素转换回进入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 转换和堆栈上的大量调用?
转换为字符串不会以某种神奇的方式发生,而是使用相同的除法并取余数,因此不会更快