public static void foo(int n) {
if(n > 0) {
if(n % 2 == 0) {
foo(n - 3);
} else {
foo(n - 1);
}
}
System.out.println(n);
}
我不理解这里的递归方法。我看到它将如何打印-1,但我不明白它将如何打印“-1 2 3”。任何帮助将不胜感激。
该方法由foo(3)
答案 0 :(得分:3)
这是过程..
foo(3) --> foo(2)
//because (3 % 2 != 0)
foo(2) --> foo(-1)
//because (2 % 2 == 0)
foo(-1) --> print -1
//because (-1 < 0)
//goes back & continue from last point where this method is called
print 2, then exit method
//goes back & continue from last point where this method is called
print 3, then exit method
//goes back & continue from last point where this method is called
back to main()
我做了,我用pythontutor.com来形象化它,但我不明白为什么它打印-1后,它会回到“n%2”行
它仍然继续打印,因为在打印-1
之后,即使它退出打印-1的方法,但它返回并从foo(-1)被调用的地方继续。它从那里继续..
答案 1 :(得分:1)
递归方法通过自己请求相同的方法继续工作。
在您的代码中,当您请求foo (3);
时间1:3%2=1
所以这将要求ELSE
部分
然后将调用foo (3-1)
= foo (2);
。
时间2:2%2=0
所以这将要求IF
部分
然后将调用foo (2-3)
= foo (-1)
。
时间3:-1 > 0 = False
因此将调用Print方法。
系统将打印-1
。
时间3功能将结束并进入时间2功能
系统会打印2
时间2功能将结束并进入时间1功能
系统将打印3
。
所以输出
-1 2 3