现在我正在尝试递归,但我陷入了困境。目的是总结数字的所有数字。例如,方法的签名采用一个int参数。此参数是数字(例如123)。递归地我应该总结1 + 2 + 3,并给出答案6.
到目前为止,我试过了:
(这可能没有意义,但我尝试了很多)
public int sumofD(int n)
{
if (n == 0)
{ return 0; }
else
{
return n % 10 + sumofD(n-(n%10));
}
}
答案 0 :(得分:5)
sumofD(n-(n%10))
从10
(n = 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));
}
}