好的,我只是在学习递归,我对一点感到困惑.
这是代码
public class RecursiveDemo { public static void showRecursion (int num) { System.out.println("Entering method. num = " + num); if (num > 1) { showRecursion(num - 1); } System.out.println("Leaving method. num = " + num); } public static void main(String[] args){ showRecursion(2); } }
我得到的输出是:
Entering method. num = 2 Entering method. num = 1 Leaving method. num = 1 Leaving method. num = 2
我的问题是为什么我得到输出“离开方法.num = 2”.不应该停在“离开方法.num = 1”,因为num已经达到1?
一旦该方法的原始调用离开if语句,它就会传递给System.out.println(“Leaving method.num =”num);.由于您最初使用值2调用了消息,因此对于此部分代码,2是num的值.
你的代码像这样运行(伪代码):
Start First Call if statement Start Second call Skips if statement Print from Second Call End of Second Call End of if Statement Print From First Call End of First Call
看起来你对递归有一个根本的误解.
当您使用(num-1)作为参数调用方法时,父调用(在本例中为第一次调用)将值num保留为其参数,在本例中为2.
翻译自:https://stackoverflow.com/questions/6867941/recursion-output-ambiguity