Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有人能给我解释一下这种递归方法吗?_Java_Algorithm_Recursion_Logic - Fatal编程技术网

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

Java 有人能给我解释一下这种递归方法吗?,java,algorithm,recursion,logic,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语句和else做什么?非常感谢。这是一种递归方法

此代码统计输入的数字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语句和else做什么?非常感谢。

这是一种递归方法

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

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

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

if (n == 0) {
    return 0;
0中没有7,因此返回0

} else if (n % 10 == 7) {
检查数字的最低有效位是否为7。如果是这种情况,则7的总数为1+通过删除该数字(将数字除以10)得到的数字中的7的数目:

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

    return count7(n/10);
}

if(n%10==7)
如果余数是7,让我们举个例子
n=17
so
17%10
您将得到7,因此添加1表示您已找到7的计数,如果您未找到,则转到else部分,并通过除以它来调用此时间假设此时n=28,此数字中显然没有7,因此如果条件满足,则转到else如果失败,它将转到else部分,并在下一次迭代中将n除以10来调用该方法。

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

n%10==7
检查最低有效位,如果它等于7,则在总和上加1

在任何情况下,该算法都通过取
n/10
来处理其他数字,这实际上删除了最低有效位,然后递归调用该方法。由于每次调用的数字都以1位数递减,并且停止触发器
n==0
使方法最终停止,因此最终返回的数字将在初始数字中计算7

范例

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

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

n%10==7
当数字的最后一位为7时,返回true。因此,如果最后一个数字是7加1,否则不要加1…你认为if-else或else-if是什么?使用调试器并观察代码流。如果你不知道如何使用它:如果你想学习编码,无论如何你都必须学会。关于这个主题,有很多可用的资源。这是计算小数位数的方法,它是
7
。这是我想要看到的答案。其他人只是解释代码的流程,而不是逻辑。谢谢兄弟。值得一提的是,
n==0
检查是基本情况?
count7(172) = 0 + count7(17) = 0 + 1 + count7(1) = 0 + 1 + 0 = 1