萌新求解:面对递归函数时,这段代码的输出结果为何是n=2 n=3?

public class QR {
    public static void main(String[] args) {
        mm(3);
    }
    public static void mm(int n) {
        if(n>2) {
            mm(n-1);
        }
        System.out.println("n="+n);
    }
}

输出结果是:
n=2
n=3

阅读 2.3k
3 个回答

你按照代码想一遍就出了。
因为对于大于2的参数,函数是干了两件事的:
一、递归调用
二、输出参数

所以参数3执行递归函数参数变成2,所以先输出2。然后参数3的第二步执行,输出3.

1.主函数调用mm(3)
2.mm(3)进入if判断,并符合条件,调用mm(2)--->记住此处未执行完成,还差一个sysn
3.mm(2)进入if判断,不符合条件,输出n=2
4.第2步执行完成,输出n=3

我的理解:递归先一层层往后递进,直到递进结束,然后回溯。
所以你的代码执行过程:

  1. 从3开始,递进到2
  2. 到2时,递进结束,输出:n=2,开始回溯
  3. 回溯到3,输出:n=3
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题