有人能解释一下这种递归方法吗?

时间:2016-04-19 12:01:16

标签: java algorithm recursion logic

此代码计算您输入的数字7。这是代码方法:

    public static int count7(int n) {
    if (n == 0) {
        return 0;
    }
    else if (n % 10 == 7) {
        return 1  + count7 (n/10);
    }
    else {
        return count7(n/10);
    }
}

else-if语句和其他内容有什么关系?非常感谢你。

5 个答案:

答案 0 :(得分:4)

if (n == 0) {
    return 0;

0中没有7,所以返回0。

} else if (n % 10 == 7) {

检查该数字的最低有效位是否为7.如果是这种情况,则7s的总数是1 +通过删除该数字得到的数字中的7s数(通过将数字除以10):

     return 1  + count7 (n/10);

} else {

如果最低有效位不是7,则7s的数量是n / 10中的7s数:

    return count7(n/10);
}

答案 1 :(得分:2)

if (n % 10 == 7)如果余数为7,则举例n=17所以17%10你将获得7所以添加1表示如果你还没找到你已找到7则计数对于其他部分,这次调用除以它假设这个时间n = 28显然这个数字中没有7,所以它会转到其他条件并且它将会失败它会转到其他部分它会通过将n除以10来调用该方法以进行下一次迭代。

答案 2 :(得分:1)

这是递归方法

第一个if基本情况,即如果数字为0,则返回0.

else if检查数字是否为7.如果是,则使用相同的方法获得剩余数字的答案(无论它们是否有任何7),向其中添加1,然后返回该值。

最后一个只删除一个数字,并调用其余数字的方法。

答案 3 :(得分:0)

此方法计算给定数字中数字7的总量。

n % 10 == 7检查最低有效数字,如果它等于7,则将总和加1。

在任何情况下,算法通过取n / 10继续其他数字,实际上删除了最低有效数字,然后递归调用该方法。随着每次调用的数字减少1位数,并且停止触发器n == 0使方法最终停止,最终返回的数字将计算初始数字中的七位数。

实施例

count7(172) = 0 + count7(17) = 0 + 1 + count7(1) = 0 + 1 + 0 = 1

答案 4 :(得分:0)

该函数只计算任何给定非负整数中数字7的出现总数。