我在高中的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;
}
答案 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/)。