Java 这个递归神秘方法做什么?

Java 这个递归神秘方法做什么?,java,Java,我是递归方法的新手,我不是100%完全理解这段代码,也许我是,但是我能对这段代码有一些想法吗 public static void mystery(int n) { if(n==0){ return; } if(n%3 == 0){ System.out.println(n); } mystery(n-1); } 到目前为止,我知道它检查n是否为0,如果为,则返回。然后检查int n是否可以被3整除,如果可以,则打印

我是递归方法的新手,我不是100%完全理解这段代码,也许我是,但是我能对这段代码有一些想法吗

public static void mystery(int n) {
    if(n==0){
        return;
    }

    if(n%3 == 0){
        System.out.println(n);
    }

    mystery(n-1);

}
到目前为止,我知道它检查n是否为0,如果为,则返回。然后检查int n是否可以被3整除,如果可以,则打印int n。那么它叫神秘(n-1)?
我不太理解最后一行代码。

它将打印从n到0的所有可被3整除的数字

它的效果与

void mystery(int i)
{
    while(i>0)
    {
        if(i%3 == 0)
        {
            print(i);
        }
        i--;
    }
}

通常,您可以使用这种方法(迭代)或递归方法来获得相同的结果。

这种方法所做的是打印所有小于或等于输入的数字,这些数字可以被3整除。

这种方法不做任何事,甚至不编译

但是,假设它这样做了,它只打印出比初始n小3的所有数字。(调用神秘n-1正在为下一个较小的int再次运行该函数)

使用代码

public static void mystery(int n) {
    if (n == 0) { 
        return;
    }
    if (n % 3 == 0) {
        System.out.println(n);
    }
    mystery(n-1);    
}

在5上调用该方法将检查5,它既不是0也不能被3整除。因此,它将在5-1或4上调用该方法。它将继续执行此操作,直到达到0。打印出所有可以被3整除的数字。

它打印出所有可以被3整除的数字,从你的数字开始,到3

如果你的输入是16,它的输出将是15 12 9 6 3


它有什么神秘之处呢?

这是为了检查从
n
到1的数字是否可以被3整除

以下是分类:

  • 以某个
    int
    作为参数调用函数
  • 如果数字可以被3整除,就把它打印出来
  • 调用相同的函数,其中
    n=n-1
    意味着
    n
    比传递的数字“少一个”
  • 当传递的数字为0时,函数退出

它将打印可被3整除的从
n
到0的编号。 假设n=12。答案是

12
9
6
3 

你的代码给出了编译错误…我想应该是这样的

public static void mystery(int n) {
        if(n==0){
         return;
        }           //Missing in your case
        if(n%3 == 0){
        // System.out.println(n);
            System.out.println(n);
        }             //Missing in your case
        mystery(n-1);
    }

它将打印0到n之间可被3整除的所有数字。

它只是使用参数
(n-1)
调用相同的方法。所以,基本上,它将继续检查从n到0的所有可被3整除的数字,并且只打印可整除的数字。只要试着写下来并试着运行它,首先确保你有合适的括号。掌握这些东西的最好方法是使用不同的参数实际运行代码,学习如何使用调试器,然后自己找到它。这样,您不仅可以理解这段代码,还可以学到一些有用的东西。