我有一个简单的递归java文件。代码如下
public class Rekursion_SA_UE {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
count(1, 10);
}
public static int count(int zahl, int max)
{
if(zahl>max) return zahl;
else{
System.out.println(zahl);
count(zahl+1, max);
return zahl;
}
}
输出为1,2,3,4,5,6,7,8,9,10。 如果我切换两行,则从10向下计数。它看起来像
public class Rekursion_SA_UE {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
count(1, 10);
}
public static int count(int zahl, int max)
{
if(zahl>max) return zahl;
else{
count(zahl+1, max);//switched
System.out.println(zahl);//switched
return zahl;
}
}
这里的输出是10,9,8,7,6,5,4,3,2,1。 这是为什么? 提前谢谢。
答案 0 :(得分:4)
这是因为当您输出count
时与输出数字时相比。
在您的第一个版本中,您输出zahl
之前递归count
,然后按顺序查看数字。这样的事情(我会停在4,而不是10):
count(1, 4) output 1 count(2, 4) output 2 count(3, 4) output 3 count(4, 4) output 4 count(5, 4) return return return return return
在你的第二个版本中,你在输出zahl
之前递归,所以你一直进入你的递归(十个级别),然后当它开始放松时,你开始输出数字,最先是最深的(10)。喜欢的东西(我再次使用4,而不是10):
count(1, 4) count(2, 4) count(3, 4) count(4, 4) count(5, 4) return output 4 return output 3 return output 2 return output 1 return
要理解这样的行为,请使用调试器并单步执行代码。在2013年,没有必要猜测代码在做什么。您可以观看它运行并准确查看正在发生的事情。
答案 1 :(得分:1)
它与递归的工作方式有关。它就像一棵树。你的第一个片段就像:
call(1)
print(1)
call(2)
print(2)
call(3)
//etc.
你的第二个片段就像:
call(1)
call(2)
call(3)
//etc.
print(3)
print(2)
print(1)