Java 这个递归神秘方法做什么?
我是递归方法的新手,我不是100%完全理解这段代码,也许我是,但是我能对这段代码有一些想法吗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整除,如果可以,则打印
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时,函数退出
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整除的数字,并且只打印可整除的数字。只要试着写下来并试着运行它,首先确保你有合适的括号。掌握这些东西的最好方法是使用不同的参数实际运行代码,学习如何使用调试器,然后自己找到它。这样,您不仅可以理解这段代码,还可以学到一些有用的东西。