【发布时间】:2017-02-27 11:15:03
【问题描述】:
我看到一些帖子了解归并排序。我知道递归方法维护堆栈来保存值。 (我的理解是 return 语句结果将在堆栈中)
private int recur(int count) {
if (count > 0) {
System.out.println(count);
return count + recur(--count); // this value will be in stack.
}
return count;
}
我对合并排序感到困惑,这里的堆栈是如何维护的。
private void divide(int low, int high) {
System.out.println("Divide => Low: "+ low +" High: "+ high);
if (low < high) {
int middle = (low + high) / 2;
divide(low, middle); // {0,7},{0,3}, {0,1} ;
divide(middle + 1, high); // {0,0}; high = 1; // 2nd divide
combine(low, middle, high);
}
}
- 所有局部变量都使用堆栈吗?
- 当第二个递归方法调用时,第一个递归也会加入吗? 在这种情况下如何维护堆栈?
【问题讨论】:
-
This 解释得最好。
-
对于更简单的问题,您会更容易理解递归。在此之前,您应该了解堆栈是什么,函数是如何被调用的,什么值被压入堆栈,返回值如何传播给调用者以及参数是如何传递给函数的。