[英]Having trouble understanding recursion in Java
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)”调用该方法的地方。
编辑:如果有人通过像552这样的数字进行编码,我将不胜感激。
如果您想了解它是如何工作的,则应该逐步调试程序中的代码,当您看到它在运行时,它将更加清晰
该方法计算数字5
在数字中出现了多少次。 例如,如果您输入数字515
,则会发生以下情况
countFive(51)
countFive(number/10)
countFive(51)
countFive(5)
countFive(number/10)
countFive(5)
count
number%10 == 5
,其结果为1%10 == 5
错误 number%10 == 5
,得出5%10 == 5
是 增量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++
在递归中,创建基本情况是为了避免无限调用同一方法。 这是您在下面定义的。
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(number / 10)
好吧,该方法计算出5
个数字的出现次数。 例如, 5123512356
将返回3
。
您只需使用递归来删除数字的最后一位,直到达到最高位(在左侧示例中为5
)。
一旦已经达到了它,它会进入number < 10
,并认为它确实是一个5。然后将离开该方法,并用持续51
(51%10 = 1),与继续512
, 5123
, 51235
( count++
)依此类推,直到与整数相乘为止。
需要说明的是:通过删除原始数字的最后一位,直到不再不能将其除以10为止,才能调用number/10
以达到最高位数。 然后支票倒退。
让我们看一个更简单的示例: 5050
。
第一次调用: countFive(5050)
。 5050> 10,因此我们调用:
第二次调用: countFive(5050/10)
= countFive(505)
。 仍大于10
第三次致电: countFive(50)
第四次调用: countFive(5)
: counter++
,数字小于10现在我们向后浏览这三个调用(最后一个完成)
第三次通话: 50 % 10
= 0, counter
保持不变
第二次通话: 505 % 10
= 5, counter++
第一次通话: 5050 % 10
= 0, counter
保持不变
之后: counter
= 2。
让我们接受您建议的输入: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。否则,它将截断最右边的数字并再次调用该方法,就像输入的是该新数字一样。 一旦只剩下一位数字,它就会停止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.