return语句执行后向后c#

问题描述 投票:0回答:1

尝试执行代码。在执行完所有操作后,当执行到 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 作为输出。这种行为的原因是什么?

c# .net
1个回答
0
投票

您不使用递归调用的结果

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;
 }

还有更高效更易读的方法来实际计算数字和。

© www.soinside.com 2019 - 2024. All rights reserved.