在Java中理解递归时遇到困难 import java.util.Scanner; 公共类findFive{ 公共静态整数计数=0; 公共静态字符串结果=null; 公共静态void main(字符串[]args){ System.out.println(“输入非负数”); 扫描仪输入=新扫描仪(System.in); int number=input.nextInt(); 第五个(数字); 系统输出打印项次(计数); } 公共静态无效计数五(整数){ 如果(数
简单地说,我不理解在Java中理解递归时遇到困难 import java.util.Scanner; 公共类findFive{ 公共静态整数计数=0; 公共静态字符串结果=null; 公共静态void main(字符串[]args){ System.out.println(“输入非负数”); 扫描仪输入=新扫描仪(System.in); int number=input.nextInt(); 第五个(数字); 系统输出打印项次(计数); } 公共静态无效计数五(整数){ 如果(数,java,recursion,Java,Recursion,简单地说,我不理解countFive(int number)方法的流程。我知道如果用户输入5,那么计数将等于1。然而,我的困惑来自于在带有“countFive(number/10)”的方法中再次调用该方法的位置 编辑:如果有人使用像552这样的数字来处理代码流,我将不胜感激。在递归中,创建基本情况是为了避免对同一方法的无限调用。这是您在下面定义的 import java.util.Scanner; public class findFive { public static int
countFive(int number)
方法的流程。我知道如果用户输入5,那么计数将等于1。然而,我的困惑来自于在带有“countFive(number/10)”的方法中再次调用该方法的位置
编辑:如果有人使用像552这样的数字来处理代码流,我将不胜感激。在递归中,创建基本情况是为了避免对同一方法的无限调用。这是您在下面定义的
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(number/10)在递归中创建基本情况,以避免对同一方法的无限调用。这是您在下面定义的
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(number/10)好的,该方法统计一个数字中出现的
5
。例如,5123512356
将返回3
您只需使用递归删除数字的最后一个数字,直到达到最高数字(5
,在左边的示例中)
一旦你到达它,它将进入数字<10
,并看到它确实是一个5。然后它将离开该方法并继续执行51
(51%10=1),继续执行512
,5123
,51235
(count++
)等操作,直到完成整数
要澄清:number/10
通过删除原始数字的最后一位直到不能再将其除以10来达到最高数字。然后支票会倒过来
让我们看一个更简单的例子:5050
第一次呼叫:countFive(5050)
。5050>10,所以我们称之为:第二次呼叫:
countFive(5050/10)
=countFive(505)
。仍然大于10第三次呼叫:
countFive(50)
第四次呼叫:
countFive(5)
:counter++
,号码小于10
现在我们回顾这三个调用(最后一个调用已完成)第三次呼叫:
50%10
=0,计数器保持不变
第二次呼叫:505%10
=5,counter++
第一次呼叫:5050%10
=0,计数器保持不变
之后:计数器
=2。好的,该方法在一个数字中统计出现的5
。例如,5123512356
将返回3
您只需使用递归删除数字的最后一个数字,直到达到最高数字(5
,在左边的示例中)
一旦你到达它,它将进入数字<10
,并看到它确实是一个5。然后它将离开该方法并继续执行51
(51%10=1),继续执行512
,5123
,51235
(count++
)等操作,直到完成整数
要澄清:number/10
通过删除原始数字的最后一位直到不能再将其除以10来达到最高数字。然后支票会倒过来
让我们看一个更简单的例子:5050
第一次呼叫:countFive(5050)
。5050>10,所以我们称之为:
第二次呼叫:countFive(5050/10)
=countFive(505)
。仍然大于10
第三次呼叫:countFive(50)
第四次呼叫:countFive(5)
:counter++
,号码小于10
现在我们回顾这三个调用(最后一个调用已完成)
第三次呼叫:50%10
=0,计数器保持不变
第二次呼叫:505%10
=5,counter++
第一次呼叫:5050%10
=0,计数器保持不变
之后:计数器
=2。如果您想了解这是如何工作的,您应该在调试器中逐步检查代码,当您看到它在运行时,它会更加清晰
该方法是计算数字5
在一个数字中出现的次数。例如,如果您传入数字515
,将发生以下情况
515大于10
调用countFive(number/10)
,其计算结果为countFive(51)
51大于10
调用countFive(number/10)
,其计算结果为countFive(5)
5比10小
5等于5
增量计数
走出去
计算结果为1%10==5
的编号%10==5
-错误
走出去
计算结果为5%10==5
的编号%10==5
-True
增量计数
countFive(515)
|515大于10
|第五(51)
|| 51大于10
||计数五(5)
|| |计数++
|| 51模10不等于5
|515模10等于5
|计数+++
如果您想了解它是如何工作的,您应该在调试器中逐步完成代码,当您看到它在运行时,它会更加清晰
该方法是计算数字5
在一个数字中出现的次数。例如,如果你
else { // number has two or more digits
countFive(number/10); //This is where it is called again
if (number%10 == 5) {
count++;
}
}
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