【问题标题】:C# recursive methodC#递归方法
【发布时间】:2016-05-23 08:17:47
【问题描述】:

现在我正在尝试练习递归,但我卡住了。目标是对数字的所有数字求和。例如,方法的签名采用一个 int 参数。此参数是数字(例如 123)。并且递归我应该总结 1+2+3 ,并给出 6 的答案。

到目前为止我试过了:

(可能没有意义,但我尝试了很多)

 public int sumofD(int n)
 {
         if (n == 0)
         { return 0; }
         else
         {
               return  n % 10 + sumofD(n-(n%10));
         }
 }

【问题讨论】:

标签: c# recursion


【解决方案1】:

sumofD(n-(n%10)) 使 10 来自 n = 11 (11-(11%10) = 11-1 = 10)。这将导致您的递归方法永远不会结束。你实际上并没有分割任何东西,所以循环是无限的。

简单地除以 10 就可以了:

sumofD(n / 10)

【讨论】:

    【解决方案2】:

    你做错了,n - (n%10) 将 123 变为 123-3,即120

    public int sumofD(int n)
    {
         if (n == 0)
         { return 0; }
         else
         {
               return  n % 10 + sumofD(n/10);
         }
    }
    

    【讨论】:

    • 这就是为什么只提供代码修复是一个很好但不是很好的答案。你忘了解释他们做错了什么。
    • 谢谢,如果有人给我时间编辑我的答案,那么只有我会:)
    【解决方案3】:

    据我了解,如果结果超过一位,您还需要对结果求和。

    所以 99 会给你 9 (9+9=18, 8+1=9)

    那么另一种方法是:

    public int sumofD(int n)
    {
        string str = n.ToString();
        int total = 0;
        foreach (char c in str.ToCharArray())
        {
            total += int.Parse(c+"");
        }
        if (total > 9) total = sumofD(total);
        return total;
    }
    

    如果你只需要直接求和(99 给你 18),你可以删除最后一个 if 行。

    【讨论】:

      【解决方案4】:

      我重写了函数(总和)。我试过了,它工作正常

          public int sumofD(int n)
          {
              if (n == 0)
              { return 0; }
              else
              {
                  return (n % 10 + sumofD(n / 10));
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2018-11-12
        • 1970-01-01
        • 2020-08-18
        • 2016-06-27
        • 2015-08-28
        • 1970-01-01
        相关资源
        最近更新 更多