C#递归方法

时间:2016-05-23 08:17:47

标签: c# recursion

现在我正在尝试递归,但我陷入了困境。目的是总结数字的所有数字。例如,方法的签名采用一个int参数。此参数是数字(例如123)。递归地我应该总结1 + 2 + 3,并给出答案6.

到目前为止,我试过了:

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

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

4 个答案:

答案 0 :(得分:5)

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

简单地用10分开就可以完成这项任务:

sumofD(n / 10)

答案 1 :(得分:1)

你做错了,n - (n%10)会做123到123-3,即120

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

答案 2 :(得分:0)

根据我的理解,如果结果多于一位,您还需要对结果进行求和。

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

答案 3 :(得分:0)

我重写了功能(总和)。我试过它正在工作

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