我是编程的新手,我看到了一本书中的递归示例,让我感到困惑。
如果return
确实结束了方法执行,那该怎么办?
public class Recursion{
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Type a number -> ");
int n = s.nextInt();
n = factorial(n);
System.out.println("FACTORIAL : " + n);
}
static private int factorial(int n) {
if (n == 0) {
System.out.println("-- REACHED ZERO! " + n);
return 1; // even if the method reach this condition, it doesn't stop the method, but why?
}
System.out.println("N: " + n);
int r = n * factorial(n - 1);
System.out.println("R: " + r); // even with the 'return 1;' line, this will print. But how does that works?
return r;
}
当我运行代码时,结果如预期:
Type a number -> 5
N: 5
N: 4
N: 3
N: 2
N: 1
-- REACHED ZERO! 0
R: 1
R: 2
R: 6
R: 24
R: 120
FACTORIAL : 120
答案 0 :(得分:0)
返回是所有方法的结束,因为它返回最终值。递归意味着某些东西会一直发生,直到达到零为止,一旦它完成,你将在方法中返回1,这意味着它在某一点停止执行。希望这澄清了任何事情,如果是这样接受答案请:)
答案 1 :(得分:0)
考虑在阶乘函数的第5行发生的事情 - 对System.out.println()的调用。当该方法返回时,会发生什么?好吧,程序流程继续到下一行,这是对factorial的调用。因此,当该函数返回时,该操作与调用println之后发生的操作相同 - flow继续执行下一个语句,这是对println的另一个调用。
答案 2 :(得分:0)
return语句确实结束了当前方法的执行。使用递归,您将多次调用该方法,因此返回只会结束同一方法的多次执行之一。