import java.util.Scanner;
public class findFive {
public static int count = 0;
public static String result = null;
public static void main(String[] args) {
System.out.println("Enter a nonnegative number");
Scanner input = new Scanner(System.in);
int number = input.nextInt();
countFive(number);
System.out.println(count);
}
public static void countFive(int number) {
if (number < 10) {// the base case
if (number == 5) {
count++;
}
} else { // number has two or more digits
countFive(number / 10);
if (number % 10 == 5) {
count++;
}
}
}
}
简单地说,我不理解countFive(int number)
方法的流程。我知道如果用户输入 5 ,那么计数将简单地等于1.但是,我的困惑来自于使用'countFive(number / 10)'在方法内再次调用该方法的地方
答案 0 :(得分:3)
如果你想看看它是如何工作的,你应该逐步调试调试器中的代码,当你看到它在行动中时会更清楚
该方法计算数字5
出现次数的次数。例如,如果您传入数字515
,则会发生以下情况
countFive(number/10)
countFive(51)
countFive(number/10)
countFive(5)
count
number%10 == 5
评估为1%10 == 5
- 错误number%10 == 5
评估为5%10 == 5
- True 增量count
countFive(515)
| 515 greater than 10
| countFive(51)
| | 51 greater than 10
| | countFive(5)
| | | count++
| | 51 mod 10 does not equal 5
| 515 mod 10 equals 5
| count++
答案 1 :(得分:1)
在递归基础中创建案例以避免对同一方法的无限调用。这是由你在下面定义的。
if (number < 10) {// the base case
if (number == 5) {
count++;
}
}
如果满足此条件,则执行此方法。如果不是这样,则执行else块。
else { // number has two or more digits
countFive(number/10); //This is where it is called again
if (number%10 == 5) {
count++;
}
}
在此您可以调用countFive(数字/ 10)
答案 2 :(得分:1)
嗯,该方法计算一个数字中5
的出现次数。例如,5123512356
将返回3
。
您只需使用递归删除数字的最后一位,直到达到最高位数(左侧示例中为5
)。
一旦你到达它,它将进入number < 10
并看到它确实是5.然后它将离开方法并继续51
(51%10 = 1),继续使用512
,5123
,51235
(count++
)等等,直到通过整数。
澄清:number/10
被调用以通过删除原始数字的最后一位来达到最高位数,直到您不能再将其除以10为止。然后检查会反过来。
让我们看一个更简单的例子:5050
。
第一个电话:countFive(5050)
。 5050> 10,所以我们打电话:
第二个电话:countFive(5050/10)
= countFive(505)
。还是大于10
第3个电话:countFive(50)
第4个电话:countFive(5)
:counter++
,号码小于10
现在我们通过这三个电话倒退(最后一个完成)
第3个电话:50 % 10
= 0,counter
保持不变
第二个电话:505 % 10
= 5,counter++
第一个电话:5050 % 10
= 0,counter
保持不变
之后:counter
= 2。
答案 3 :(得分:1)
让我们来看你提出的输入:552并按照方法进行。
开始时计数为0。
number count number < 10 number == 5 number % 10 == 5
----------- ------- -------------- -------------- ------------------
552 0 false false false
55 0 false false true
1
5 1 true true true
2
并且它将返回2.基本上,您可以看到该方法计算输入中数字5
的出现次数。
您的基本案例检查它是否为数字(< 10
),如果是,则检查该数字是否为5.否则,它会切断最右边的数字并再次调用该方法,就好像输入是新的一样数。一旦数字只剩下一个数字,它就会停止。