首页 > 解决方案 > 请帮我解决这个递归函数

问题描述

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)线?

标签: javarecursion

解决方案


由于它是递归的,并且递归调用出现在您的打印行之前,它会一遍又一遍地递归调用自己,直到达到基本情况。只有在递归调用结束后,您的打印才会被允许执行。

像这样的东西

Do something
   first recursive call
   Do something
      second recursive call
      Do something
         third recursive call
         Ending recursive
      Ending recursive
   Ending Recursive

首先,整个方法将停止,但正如您可以看到的那样,递归调用的基本情况/结束实际上将在其他递归方法中执行,因此您在 012 的表单中看到的是递归结束后执行的行.


推荐阅读