这种递归神秘方法有什么作用?

时间:2012-03-14 05:50:32

标签: 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整除,如果是,那么它将打印出int n。然后它称为神秘(n-1)? 我不太了解最后一行代码。

7 个答案:

答案 0 :(得分:6)

该方法无效,甚至无法编译。

假设它确实只打印了所有可被3整除的数字,而不是初始n。(调用神秘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整除的数字。

答案 1 :(得分:5)

它会打印从n到0的所有数字,可以被3整除。

它与

具有相同的效果
void mystery(int i)
{
    while(i>0)
    {
        if(i%3 == 0)
        {
            print(i);
        }
        i--;
    }
}

通常你可以使用这种方法(迭代)或递归方法来实现相同的结果。

答案 2 :(得分:5)

打印出所有可以除以3的数字,从数字开始,到3。

如果输入为16,则输出为15 12 9 6 3.

关于它的神秘是什么?

答案 3 :(得分: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整除的所有数字。

答案 4 :(得分:2)

此方法的作用是打印小于或等于输入的所有可被3整除的数字

答案 5 :(得分:1)

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

这是细分:

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

答案 6 :(得分:0)

它会将n的nos打印到0,可以被3整除。 假设n = 12.答案将是

12
9
6
3