这是合并排序中分区的代码。我实际上无法理解 reusrion 在其中是如何工作的!
合并排序分区
void partition(int arr[], int low, int high){
int mid;
if(low < high){
mid = (low + high)/2;
partition(arr, low, mid);
partition(arr, mid + 1, high);
mergeSort(arr, low, mid, high);
}
}
实际上我陷入了许多递归问题,并且无法理解系统堆栈在递归中如何工作......
我是初学者..
我将尝试使递归函数对您来说更简单。以阶乘伪代码的一个小例子为例:
int fact(n)
{
if(n==1 || n==0) return 1;
else
return (n*fact(n-1));
}
这将创建一个函数堆栈。假设我打电话fact(3)
这将形成一个像这样的堆栈:
fact(0)
fact(1)
fact(2)
fact(3)
每个函数都被推入堆栈。第一的fact(3)
叫做。fact(3)
calls fact(2)
。所以在通过之后——
堆栈构建:
fact(0)
fact(1) fact(1)
fact(2) fact(2) fact(2)
empty --> fact(3) ---> fact(3) --> fact(3) --> fact(3)
现在函数捕获n=0
并返回1
。现在功能开始弹出。
Stack :
fact(0) -----> (returns 1) = 1
fact(1) -----> (returns 1) * 1 (1's popped out)
fact(2) -----> (returns 2) * 1 (1 is actually 1*1)
fact(3) -----> (returns 3) * (2 = 2*1*1)
----->6
编辑:添加了流行功能。至于排序堆栈,请查看@P0W的答案。
尝试举一个小例子并构建你的堆栈。然后转向复杂的问题。记住练习是关键。这就是递归函数作为堆栈的工作原理。
希望能帮助到你。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)