繁体   English   中英

C#递归方法

[英]C# recursive method

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

到目前为止,我尝试了:

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

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

sumofD(n-(n%10))使10n = 1111-(11%10) = 11-1 = 10 )。 这将导致您的递归方法永远不会结束。 您实际上并没有划分任何内容,因此循环是无限的。

简单地除以10就可以在这里完成工作:

sumofD(n / 10)

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

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

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

所以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行。

我重写了函数(的总和)。 我试过了

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM