首页 文章

使用递归获取整数中的位数[关闭]

提问于
浏览
2

我正在编写一个函数,它应该使用递归来获取整数中的位数,例如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 回答

  • 0

    好吧,你需要稍微调整你的递归函数:

    public static int GetDigits(int number, int digits)
    {
        if (number == 0)
            return digits;
    
        return GetDigits(number / 10, ++digits);
    }
    

    你的错误是,你没有从递归调用中返回结果 .

  • 5

    您正在返回 i ,但是当函数从递归返回时, i 的值为1,则返回1 .

    您必须返回递归的结果 .

    return getDigits(...)
    

    public static int getDigits(int digits, int i)
    {
        if (digits != 0)
        {
            i++;
            getDigits(digits/10, i);                
        }
    
        return i;
    }
    

    步骤1:

    digits = 5428
    i      = 0
    

    第2步:

    digits = 542
    i      = 1
    

    [...]您递增 i ,但是您没有返回递归的结果,而是在步骤#1返回 i 的值 .

    现在,如果你喜欢这样:

    public static int GetDigits(int number, int digits)
    {
        if (number == 0)
        {
            return digits == 0 ? 1 : digits;
        }
    
        return GetDigits(number / 10, ++digits);
    }
    

    您将从递归返回值 .

    步骤1:

    number = 5428
    digits = 0
    

    第2步:

    number = 542
    digits = 1
    

    第3步:

    number = 54
    digits = 2
    

    第4步:

    number = 5
    digits = 3
    

    第五步:

    number = 0
    digits = 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#上的说明(数字位数)

  • -3

    这是错误的条件 if (digits != 0) 你不能通过除法得到零,你必须使用if语句

    if (digits != 0)
    {
         i++;
         return getDigits(digits/10, i);                
    }
    else
    {
         return i;
    }
    

相关问题