为什么在这段递归代码中执行 println?
Why println is being executed in this recursive piece of code?
在这段代码中,arrLength 从 4 开始,然后一直递减直到达到零。
在它达到零的那一刻,它不应该再执行 if 块内的内容。
但实际情况是,当它达到零时,它仍然执行 println 行。
不了解该 println 行是如何执行的,因为该行位于 if 块内,并且当 arrLength 变为零时,if 块内的任何内容都不应执行。
最后它打印 5, 6, 2, 1 而在我的理解中它应该不打印任何东西永远不会执行 println 行。
class ArrayElements{
public void printElements(int arr[], int arrLength){
if(arrLength != 0){
arrLength--;
printElements(arr, arrLength);
System.out.println(arr[arrLength]);
}
}
}
public class Main {
public static void main(String[] args) {
int arr[] = {5,6,2,1};
int arrLength = arr.length;
ArrayElements mv = new ArrayElements();
mv.printElements(arr, arrLength );
}
}
了解正在发生的事情的一种简单方法是像这样修改您的 printElements 方法:
public void printElements(int arr[], int arrLength){
System.out.println("arrLength value is " + arrLength);
if(arrLength != 0){
arrLength--;
printElements(arr, arrLength);
System.out.println(arr[arrLength]);
}
}
输出将是:
arrLength value is 4
arrLength value is 3
arrLength value is 2
arrLength value is 1
arrLength value is 0
5
6
2
1
如您所见,您进行了 5 次递归调用,但只打印了 4 个值。原因是当 arrLength 等于 0 时,第二个 println 没有被执行。
这意味着当arrLength为0时不进入if条件
在这段代码中,arrLength 从 4 开始,然后一直递减直到达到零。 在它达到零的那一刻,它不应该再执行 if 块内的内容。 但实际情况是,当它达到零时,它仍然执行 println 行。 不了解该 println 行是如何执行的,因为该行位于 if 块内,并且当 arrLength 变为零时,if 块内的任何内容都不应执行。 最后它打印 5, 6, 2, 1 而在我的理解中它应该不打印任何东西永远不会执行 println 行。
class ArrayElements{
public void printElements(int arr[], int arrLength){
if(arrLength != 0){
arrLength--;
printElements(arr, arrLength);
System.out.println(arr[arrLength]);
}
}
}
public class Main {
public static void main(String[] args) {
int arr[] = {5,6,2,1};
int arrLength = arr.length;
ArrayElements mv = new ArrayElements();
mv.printElements(arr, arrLength );
}
}
了解正在发生的事情的一种简单方法是像这样修改您的 printElements 方法:
public void printElements(int arr[], int arrLength){
System.out.println("arrLength value is " + arrLength);
if(arrLength != 0){
arrLength--;
printElements(arr, arrLength);
System.out.println(arr[arrLength]);
}
}
输出将是:
arrLength value is 4
arrLength value is 3
arrLength value is 2
arrLength value is 1
arrLength value is 0
5
6
2
1
如您所见,您进行了 5 次递归调用,但只打印了 4 个值。原因是当 arrLength 等于 0 时,第二个 println 没有被执行。
这意味着当arrLength为0时不进入if条件