Java 递归反向阵列打印
我在一个答案中看到了这个算法,现在我有了疑问 是一个具有两个参数的递归函数,一个整数数组和一个整数。 我们的目标是打印数组,但以相反的顺序,我测试了它,它工作了!但我不知道为什么。。。下面是函数Java 递归反向阵列打印,java,recursion,Java,Recursion,我在一个答案中看到了这个算法,现在我有了疑问 是一个具有两个参数的递归函数,一个整数数组和一个整数。 我们的目标是打印数组,但以相反的顺序,我测试了它,它工作了!但我不知道为什么。。。下面是函数 public static void reverse(int[] a, int position) { // BASE if (position == a.length) return; // RECURSIVE rev
public static void reverse(int[] a, int position) {
// BASE
if (position == a.length) return;
// RECURSIVE
reverse(a, position + 1);
System.out.println(a[position]);
}
}
如果条件为真,返回并不意味着程序将结束?
如果为false,函数将在不打印数字的情况下执行递归调用,还是不打印?
谢谢
return
不是“退出”语句return
将程序返回到调用方法的位置,并执行下一行<代码>系统。退出(0)将结束程序并停止所有执行 return语句并不意味着程序将结束。这意味着该方法的特定调用结束
下一条语句是递归调用。它使用从0
到数组长度的每个可能的位置
不断调用自己。因此,代码第一次通过递归调用是在最后一个递归方法返回之后,position
现在位于数组的末尾。然后打印最后一个字符。它返回,上一个递归调用(具有previousposition
值)将打印下一个到最后一个字符,依此类推,直到对递归方法的原始调用打印第一个字符,然后完成
例如,对于长度为3{10,11,12}的数组
reverse(a, 0)
reverse(a, 1)
reverse(a, 2)
reverse(a, 3)
base case; return
print a[2] "12"
print a[1] "11"
print a[0] "10"
done
这背后的关键概念是,您需要了解堆栈如何工作。对函数的每次调用都是一个堆栈,不管它是从其他函数调用还是从自身调用。使用调试器并遵循流程。