尝试执行代码。在执行完所有操作后,当执行到 return 语句时,它会向后移动并更改返回值的值。
输入 = 38
3 + 8 = 11
1 + 1 = 2
这就是代码的逻辑。
public int AddNums(int num)
{
if (num == 0 || numOfDigits(num) == 1)
{
return num;
}
List<int> seperatedDigits = seperateDigits(num);
int output1 = 0;
for (int i = 0; i < seperatedDigits.Count; i++)
{
output1 += seperatedDigits[i];
}
if ((numOfDigits(output1)) > 1)
{
AddNums(output1);
}
return output1;
}
public List<int> seperateDigits(int num)
{
int digitsCount = numOfDigits(num);
List<int> numList = new List<int>();
for (int i = 0; i < digitsCount; i++)
{
if (num != 0)
{
numList.Add(num % 10);
num = (num / 10);
}
}
return numList;
}
public int numOfDigits(int num)
{
return (int)Math.Log10(num) + 1;
}
得到 2 作为输出后,执行再次向后并返回 11 作为输出。这种行为的原因是什么?
您不使用递归调用的结果
AddNums
。public int AddNums(int num)
{
if (num == 0 || numOfDigits(num) == 1)
{
return num;
}
List<int> seperatedDigits = seperateDigits(num);
int output1 = 0;
for (int i = 0; i < seperatedDigits.Count; i++)
{
output1 += seperatedDigits[i];
}
if ((numOfDigits(output1)) > 1)
{
output1 = AddNums(output1); // Here !
}
return output1;
}