递归的问题,谢谢了!

来源:百度知道 编辑:UC知道 时间:2024/06/04 05:23:03
请高手帮忙解答下这个简单的 递归测试

public static void main(String[] args) {
// TODO 自动生成方法存根
int n = 5;
hanluota(n, 'a', 'b', 'c');
}

public static void hanluota(int num, char a, char b, char c) {
System.out.println("--- num = " + num);
if (num > 1) {
hanluota(num - 1, 'a', 'b', 'c');
System.out.println("num = " + num);
}
}

打印出来是:--- num = 5
--- num = 4
--- num = 3
--- num = 2
--- num = 1
num = 2
num = 3
num = 4
num = 5

带有--- num 的我能看懂原因.. 但为什么 后面又出现了连续的num = 2
num = 3
num = 4
num = 5

这点有点犯迷糊... 请高手帮忙解答下逻辑该怎么理.! 谢谢了!

System.out.println("--- num = " + num);在递归外面,所以在递归过程中当的时候都要执行,所以有:--- num = 5
--- num = 4
--- num = 3
--- num = 2
--- num = 1,
在if (num > 1) {
hanluota(num - 1, 'a', 'b', 'c');
System.out.println("num = " + num);
}
中当num为5的时候满足条件,要进行递归hanluota(5, 'a', 'b', 'c');
此时将5放入堆栈中,递归得到hanluota(4, 'a', 'b', 'c');一次类推直到hanluota(2, 'a', 'b', 'c');此时递归结束,在将堆栈中的数据取出,由于入栈顺序为5432,有栈的先进后出原理知道输出因为2345,故与结果num = 2
num = 3
num = 4
num = 5