我正在忙着研究java中的递归,并且很难理解它在大多数时候是如何工作的。我有一本书中的示例程序,他们要求您找到if n = 3的输出:
public void printX(int n){
if(n <= 0)
System.out.print(0);
else{
printX(n-1);
System.out.print(n);
printX(n - 2);
}
}
我认为结果将是&#34; 231&#34;。然而,在将代码输入Eclipse并运行程序之后,结果变成了&#34; 010203010&#34;代码。
有人可以帮助我理解为什么这是输出而不是我的想法?
答案 0 :(得分:2)
理解这种行为的最好方法是逐行逐步;你可以用调试器来做到这一点。
简短的回答:你认为它会首先打印2,因为当compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.google.android.gms:play-services-location:10.2.1'
为3时,首先要做的是调用n
printX(n-1)
。但当printX(2)
为n
时,它会做什么?只打印2?不......首先调用2
,这次是printX(n-1)
。等等
答案 1 :(得分:0)
这里要注意的是调用函数将始终在被调用函数之后完成。每次调用printX
时,调用函数都会暂停并等待,直到被调用的函数完成,然后再继续执行。思考它的一种方式是它是一种在彼此内嵌套函数的方法。
答案 2 :(得分:-1)
请按如下方式重写代码:
public void printX(int n){
if(n >0)
System.out.print(n);
n--;
printX(n)
else{
System.out.print(n);
}
}