为了账号安全,请及时绑定邮箱和手机立即绑定

使用递归来确定位数

使用递归来确定位数

四季花海 2021-10-27 10:45:57
我目前被困在我不完全理解的一行代码上。所以,我正在阅读书中的示例代码,其中一个“程序”使用递归来确定整数 n 中的位数。我陷入困境并且不完全理解的一行代码是:if (number >= 10) {    return numberOfDigits(number / 10) + 1;例如,这使得数字 42 返回 2,这是它应该做的。但是函数究竟是如何返回 2 的呢?42 除以 10 等于 4,2 或 4。加 1 是 5,那么它如何返回 2?
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

完整的方法可能如下所示:


public int numberOfDigits(int number) {

    if (number >= 10) {

        return numberOfDigits(number / 10) + 1;

    }


    // base case: only one digit

    return 1;

}

通过检查,如果我们传递一个两位数,该if语句将被命中,无论输入 / 10 的递归调用是什么,它都会返回加一。假设输入是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;

}


查看完整回答
反对 回复 2021-10-27
  • 2 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信