我有以下几点:
public static void main(String[] args){
Screen.clear();
System.out.println(depth(5,0));
}
public static int depth(int n, int depth){
System.out.println(depth);
if(n == 0)return depth;
else{
System.out.println(depth);
return depth(n-1, depth++);
}
}
为什么这总是打印出0,n次?为什么深度没有增加?
你没有预递增。您的函数在递增之前传递0,因此实际上没有递增。试试这个:
public static void main(String[] args){
Screen.clear();
System.out.println(depth(5,0));
}
public static int depth(int n, int depth){
System.out.println(depth);
if(n == 0)return depth;
else{
System.out.println(depth);
return depth(n-1, ++depth);
}
}
或者(如果你想使用后置增量)
public static void main(String[] args){
Screen.clear();
System.out.println(depth(5,0));
}
public static int depth(int n, int depth){
System.out.println(depth);
if(n == 0)return depth;
else{
System.out.println(depth++);
return depth(n-1, depth);
}
}
第一次调用深度
时,n
传递5,深度
传递0(顺便说一句,一般来说方法和参数同名是个坏主意)。你是这样做的:
System.out.println(depth(5,0));
稍后,你这样称呼它:
return depth(n-1, depth++);
让我们看看会发生什么:
n
中减去1并将结果传递给新函数调用深度
,然后递增它(深度
计算为其初始值并递增它,而深度
将首先递增它并计算结果)因此,这些是每次调用时n
和深度
的值:
为了更好地理解这一点,让我们尝试以下操作:
int i = 1;
System.out.println(i++); //1
System.out.println(i); //2
int j = 1;
System.out.println(++j); //2
System.out.println(j); //2