Java 返回递归方法和使用返回方法之间的区别是什么?

Java 返回递归方法和使用返回方法之间的区别是什么?,java,Java,我在高中上java课,所以我对编写代码非常陌生 对于递归方法,使用return一词如何影响输出?我假设返回意味着程序的结束 对于这个程序,随机(15)输出是什么?它会一直循环直到c为10然后返回80吗?如果可能的话,请一步一步地把它分解,因为我很难理解它 public int random(int c) { if( int c > 10) return random(c - 1); return c * 8; } 这段代码与没有return关键字的代码有

我在高中上java课,所以我对编写代码非常陌生

对于递归方法,使用return一词如何影响输出?我假设返回意味着程序的结束

对于这个程序,随机(15)输出是什么?它会一直循环直到c为10然后返回80吗?如果可能的话,请一步一步地把它分解,因为我很难理解它

public int random(int c) 
{
    if( int c > 10)
        return random(c - 1);
    return c * 8;
}
这段代码与没有return关键字的代码有何不同

public int random(int c) 
{
    if( int c > 10)
        random(c - 1);
    return c * 8;
}

尽管您可能应该对递归方法进行一些研究,但我将尽可能简单地解释这种差异

在第一个方法中,如果
c>10
,则该方法将调用的结果返回给自身,并带有参数
c-1
,这意味着只要c大于10,就会调用该方法,并且c将减少1,直到等于10,然后返回80(10*8)

第二种方法没有什么特别的作用,实际上你可以说它就像只返回
c*8
,为什么?因为您正在使用
c-1
调用相同的方法,但是您没有使用结果,代码从if语句中取出,并转到
返回c*8

另一方面,对于第一个方法,它将被递归调用,直到c达到10,然后将返回80,返回到该方法的第一次调用(有关更多信息,请参阅)。

首先,我不确定您为什么需要问这个问题,事实上,我认为您非常理解递归方法的概念

第一个片段

正如您正确解释的,random(15)返回值80

public static void main(String[] args) {
    System.out.println("Result: " + random(15));
}

private static int random(int c) {
    if (c > 10) {
        System.out.println("c is greater than 10");
        return random(c - 1);
    }
    System.out.println("multiplying c=" + c + " by 8");
    return c * 8;
}
输出:

run:
c is greater than 10
c is greater than 10
c is greater than 10
c is greater than 10
c is greater than 10

multiplying c=10 by 8

Result: 80
BUILD SUCCESSFUL (total time: 0 seconds)
run:
c is greater than 10 // method a
c is greater than 10 // b
c is greater than 10 // c
c is greater than 10 // d
c is greater than 10 // e

multiplying c=10 by 8 // --> random(c - 1); in method e
multiplying c=11 by 8 // happening in method e
multiplying c=12 by 8 // d
multiplying c=13 by 8 // c
multiplying c=14 by 8 // b
multiplying c=15 by 8 // a

Result: 120
BUILD SUCCESSFUL (total time: 0 seconds)
为了便于解释,变量c被减少了五倍,然后最后乘以8

第二段代码

我只是假设您的第二种方法应该如下所示:

public static void main(String[] args) {
    System.out.println("Result: " + random(15));
}

private static int random(int c) {
    if (c > 10) {
        System.out.println("c is greater than 10");
        random(c - 1);
    }
    System.out.println("multiplying c=" + c + " by 8");
    return c * 8;
}
这一次,输出看起来不同,结果也不同

输出:

run:
c is greater than 10
c is greater than 10
c is greater than 10
c is greater than 10
c is greater than 10

multiplying c=10 by 8

Result: 80
BUILD SUCCESSFUL (total time: 0 seconds)
run:
c is greater than 10 // method a
c is greater than 10 // b
c is greater than 10 // c
c is greater than 10 // d
c is greater than 10 // e

multiplying c=10 by 8 // --> random(c - 1); in method e
multiplying c=11 by 8 // happening in method e
multiplying c=12 by 8 // d
multiplying c=13 by 8 // c
multiplying c=14 by 8 // b
multiplying c=15 by 8 // a

Result: 120
BUILD SUCCESSFUL (total time: 0 seconds)
您可以看到,在每个方法(a-e)中,变量c减少1,然后等于10-15。最后只有最后一次乘法重要,当然是15*8,然后将此运算的结果显示为结果


Cobra_8

“这段代码……没有return关键字。”它有两次return关键字。事实上,我看不出这两个代码示例之间有任何区别。“对于这个程序,随机(15)输出是什么?”只需运行代码并查看。两个代码示例都是相同的。请更正它。“请一步一步地分解它,因为我理解它有困难”查阅一个关于如何使用调试器的教程,因为这正是调试器允许您执行的操作-一次一行地逐步完成代码。就像@csmckelvey提到的,只需运行它,看看结果是什么。如果结果本身没有帮助,请尝试使用调试器单步执行,并确保在遇到行
returnrandom(c-1)