我有这个代码,我只是想知道我对它的理解是否正确。
5传递给方法编号,n现在等于5. if语句为false,因此它执行else语句,并执行numbers(5-1)
并再次执行方法编号并且不打印n或返回爱好。
现在n = 4并且重复相同的方法直到n = 1,此时它会返回?所以从这一点开始它返回到n = 2的地方,跟随打印2(System.out部分)然后返回,此时它返回到n = 3,打印3并返回..等等一直到5?
这就是我的想法,有人可以为我澄清一下,谢谢!
public class test {
public static void main(String [] args){
numbers(5);
}
public static void numbers (int n){
if(n==1) return;
else{
numbers(n-1);
System.out.println(n);
return;
}
}
}
答案 0 :(得分:1)
您的理解是正确的。您可以通过逐步调试调试器中的代码来自行验证。
答案 1 :(得分:0)
您的理解和代码是正确的。我建议的是,没有必要在else
块中使用return语句,因为你有适当的终止条件。所以修改后你的代码就是这样的。
public class test{
public static void main( String[] args )
{
numbers(5);
}
public static void numbers (int n){
if(n==1) return;
else{
numbers(n-1);
System.out.println(n);
}
}
}
答案 2 :(得分:0)
我让代码不干净,尽可能少改变OP的代码。为了额外的功劳,您可以尝试简化上述任何/所有示例,以便它们不会同时使用if和else块,但只需要一个if块,同时还要删除所有返回语句。 / p>
祝你好运,并享受编码乐趣。 :)
然而,一个澄清
我想你已经知道了,但你的代码不会打印1
。它会打印出来:
2
3
4
5
如果您还要打印1,那么您可以通过3种不同方式解决此问题
将n==1
条件更改为n==0
。这就是我要做的。这对我来说是最简单的,也是最自然的。
public static void numbers (int n){
if(n==0) return;
else{
numbers(n-1);
System.out.println(n);
return;
}
}
在条件
之前移动打印件public static void numbers (int n){
System.out.println(n);
if(n==1) return;
else{
numbers(n-1);
return;
}
}
现在您可能猜到这会将数字打印为
5
4
3
2
1
在两种情况下都执行打印,但是在if块之后,而不是在
之前public static void numbers (int n){
if(n==1){
// Do nothing, Don't return yet.
//return;
} else{
numbers(n-1);
// Don't return yet.
//return;
}
System.out.println(n);
}