使用递归确定位数

时间:2018-10-03 15:49:46

标签: java recursion integer digits

我目前只能停留在我不太了解的一行代码上。 因此,我正在阅读本书中的示例代码,“程序”之一使用递归来确定整数n中的位数。我被困住并且不完全理解的一行代码是:

if (number >= 10) {
    return numberOfDigits(number / 10) + 1;

例如,这使数字42返回2。但是该函数究竟如何返回2? 42除以10等于4,2或4。加1为5,那么它如何返回2?

2 个答案:

答案 0 :(得分:2)

递归是一种方法,它使方法的一个调用执行某些工作,同时将其余工作推迟到进行另一个递归调用。在这里,“数字位数”递归方法表示数字中的位数等于最后一位的1加上最后一位删除后剩余的位数。

return语句中,+ 1计算数字中的最后一位,而number / 10执行截断整数除法以删除最后一位。递归调用对数字中的数字进行计数,最后一位被删除。

当数字为一位数字(不大于或等于10)时,未显示的是递归的基本情况。这只是1位数字。值4未计入计算中。该方法有效地对数字进行一次计数,直到没有剩余的数字为止。每位数有一个递归方法调用。

答案 1 :(得分:0)

完整方法可能看起来像这样:

public int numberOfDigits(int number) {
    if (number >= 10) {
        return numberOfDigits(number / 10) + 1;
    }

    // base case: only one digit
    return 1;
}

通过检查,如果我们传递两位数字,则if语句将被命中,它将返回输入/ 10的递归调用加1。假设输入为42。在这种情况下,它将返回numberOfDigits(42 / 10) + 1。我们知道numberOfDigits(4)返回1,因此总共返回2,这是正确的。

使用归纳推理,我们可以增强自己的能力,以说服任意数量的任意长度。

旁注:在旅行中,我经常看到基本案例首先使用if语句处理,而归纳案例默认发生。因此,我本来希望看到以下代码:

public int numberOfDigits(int number) {
    if (number < 10) return 1;

    return numberOfDigits(number / 10) + 1;
}