Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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中理解递归时遇到困难 import java.util.Scanner; 公共类findFive{ 公共静态整数计数=0; 公共静态字符串结果=null; 公共静态void main(字符串[]args){ System.out.println(“输入非负数”); 扫描仪输入=新扫描仪(System.in); int number=input.nextInt(); 第五个(数字); 系统输出打印项次(计数); } 公共静态无效计数五(整数){ 如果(数_Java_Recursion - Fatal编程技术网

在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