返回递归方法和使用返回方法之间的区别?

时间:2018-02-21 21:29:02

标签: java

我在高中的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;
}

2 个答案:

答案 0 :(得分:1)

首先,我不确定为什么你需要提出这个问题,实际上我认为你理解递归方法的概念非常好。

第一个代码段

正如您所解释的,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)

只是为了解释,变量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 // 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在每种方法(a-e)中减1,然后等于10-15。最后只有最后一个乘法很重要,当然是15 * 8,然后显示结果。

Cobra_8。

答案 1 :(得分:0)

即使您应该对递归方法进行一些研究,我也会尽量解释差异。

在第一种方法中,如果c > 10,则该方法使用参数c - 1将调用结果返回给自身,这意味着只要c大于10,该方法就会得到被叫和c将减1,直到它等于10然后返回80(10 * 8)。

第二种方法没有什么特别之处,事实上你可以说它只是回归c * 8,为什么?因为您使用c - 1调用相同的方法,但是您没有使用结果,而且代码会从if语句中移出并转到return c * 8;,所以无论多少都是c,结果将始终为c * 8

另一方面,使用第一种方法,它将被递归调用,直到c达到10,然后将80返回到方法的第一次调用(有关更多信息,请参阅https://introcs.cs.princeton.edu/java/23recursion/)。