我在一个答案中看到了这个算法,现在我有疑虑 是一个带有两个参数的递归函数,一个整数数组和一个整数。 目标是打印阵列,但顺序相反,我测试它,它的工作原理!但我不知道为什么......这是函数
public static void reverse(int[] a, int position) {
// BASE
if (position == a.length) return;
// RECURSIVE
reverse(a, position + 1);
System.out.println(a[position]);
}
}
如果条件为真,则返回并不意味着程序将结束? 如果它是假的,该函数将执行递归调用而不打印数字,或不? 谢谢!
答案 0 :(得分:2)
return
语句并不意味着程序将结束。这意味着该方法的特定调用结束。
下一个语句是递归调用。它始终使用position
从0
到数组长度的每个position
调用自身。所以代码第一次通过递归调用是在最后一个递归方法返回后,position
现在位于数组的末尾。然后它打印最后一个字符。它返回,之前的递归调用(具有前一个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
值)打印倒数第二个字符,依此类推,直到对递归方法的原始调用打印出第一个字符,然后完成
E.g。对于长度为3 {10,11,12}的数组
{{1}}
答案 1 :(得分:0)
return
不是“退出”声明。 return
将程序返回到调用方法的位置,并执行下一行。 System.exit(0)
将终止您的程序并停止所有执行。
答案 2 :(得分:0)
这背后的关键概念是,您需要了解堆栈的工作原理。对函数的每次调用都是一个堆栈,无论是从某个其他函数调用还是从它自己调用。