请帮我这个递归功能

时间:2018-06-05 00:16:44

标签: java recursion

void myMethod( int counter) {
    if(counter == 0)
        return;
    else {
        System.out.println("hello" + counter);
        myMethod(--counter);
        System.out.println("" + counter);
        //return;
    }
}

当我将3传递给函数时,此输出将是

hello3
hello2
hello1
0
1
2

我理解为什么输出有hello3 hello2 hello1,但为什么0 1 2?当计数器从3减少到0时,它应该进入if并返回,对吗?该程序如何进入System.out.println("" + counter)行?

2 个答案:

答案 0 :(得分:2)

由于它是递归的并且递归调用在打印行之前,它将递归地自我调用,直到它到达基本情况。只有在递归调用结束后才允许执行打印。

像这样的东西

ionic v1

首先这里将整个方法停止,但是你可以看到,基本类/递归调用的结束实际上将在其他递归方法中执行,所以你在012中的表单中看到的是在递归已经结束。

答案 1 :(得分:0)

这种情况发生的原因是代码执行后  myMethod(--counter);

它在它之后执行打印输出,因此每次计数器值不为0时,一旦其他递归函数完成,将始终调用此代码。每当你点击else {块时,其中的所有代码都将被执行,System.out.println("" + counter)最后打印,因为你之前有递归调用,并且首先执行该代码。

如果在IDE中设置断点并运行调试器,您将更清楚地了解正在发生的事情。