我正在编写一个函数,它应该使用递归来获取整数中的位数,例如236有3位数 . 到目前为止,我有这个,但它不起作用 . 那么,那里的递归有一个非常好的解释吗?
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(getDigits(5428, 0));
Console.ReadLine();
}
public static int getDigits(int digits, int i)
{
if (digits != 0)
{
i++;
getDigits(digits/10, i);
}
return i;
}
}
}
3 回答
好吧,你需要稍微调整你的递归函数:
你的错误是,你没有从递归调用中返回结果 .
您正在返回
i
,但是当函数从递归返回时,i
的值为1,则返回1 .您必须返回递归的结果 .
步骤1:
第2步:
[...]您递增
i
,但是您没有返回递归的结果,而是在步骤#1返回i
的值 .现在,如果你喜欢这样:
您将从递归返回值 .
步骤1:
第2步:
第3步:
第4步:
第五步:
步骤#5进入
(number == 0)
的条件并返回digits
,在此步骤为4
,返回步骤#4 .步骤#4将步骤#5的
GetDigits(number / 10, ++digits);
的结果返回到步骤#3 .步骤#3将步骤#4的
GetDigits(number / 10, ++digits);
的结果返回到步骤#2 .步骤#2将步骤#3的
GetDigits(number / 10, ++digits);
的结果返回到步骤#1 .然后步骤#1返回值
4
,这是您从递归的最后一次交互中获得的结果 .prefix and postfix operations in c#上的说明(数字位数)
这是错误的条件
if (digits != 0)
你不能通过除法得到零,你必须使用if语句