递归关于内存的深入理解
2016-05-29 13:45
211 查看
int MaxSubSum(const int arr[], int left, int right)
{
int MaxLeftSum, MaxRightSum;
int MaxLeftBorderSum, MaxRightBorderSum;
int LeftBorderSum, RightBorderSum;
int center, i;
if(left == right)
{
if(arr[left] > 0)
{
return arr[left];
}
else
{
return 0;
}
}
center = (left + right) / 2;
MaxLeftSum = MaxSubSum(arr, left, center);
MaxRightSum = MaxSubSum(arr, center + 1, right);
这个问题其实是一个关于栈内存的关系,每次调用递归,都需要开辟一块栈内存。MaxSubSum(arr, center + 1, right);这个函数的栈内存是嵌套在MaxSubSum(arr, left, center);开辟的栈内存之中的,这个问题花了2个小时我才理解清楚,描述起来有点麻烦,要是有兴趣,可以加我QQ 597483156 使用语音讲解。
{
int MaxLeftSum, MaxRightSum;
int MaxLeftBorderSum, MaxRightBorderSum;
int LeftBorderSum, RightBorderSum;
int center, i;
if(left == right)
{
if(arr[left] > 0)
{
return arr[left];
}
else
{
return 0;
}
}
center = (left + right) / 2;
MaxLeftSum = MaxSubSum(arr, left, center);
MaxRightSum = MaxSubSum(arr, center + 1, right);
这个问题其实是一个关于栈内存的关系,每次调用递归,都需要开辟一块栈内存。MaxSubSum(arr, center + 1, right);这个函数的栈内存是嵌套在MaxSubSum(arr, left, center);开辟的栈内存之中的,这个问题花了2个小时我才理解清楚,描述起来有点麻烦,要是有兴趣,可以加我QQ 597483156 使用语音讲解。
相关文章推荐
- Hibernate HQL语句总结
- axis : java.lang.NoSuchMethodError
- Mysql免安装版注意事项
- 文本处理,将交互组数据转化成邻接矩阵
- 多栈共享技术,双端栈的初始化、进栈、出栈操作
- 链队列的初始化、入队、出队等操作实现
- 循环队列的初始化、入队、出队等基本操作
- 链栈的基本操作
- 多栈运算
- 汉诺塔问题的递归解法
- 求f(k)=k^k(k=1...n)的前n项和
- 二分查找算法的递归、循环实现及其缺陷
- 稀疏矩阵的列序递增法和一次定位快速转置法
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- 打印菜单界面,用c语言实现二叉树的基本操作
- 用两个队列模拟实现一个栈的过程
- 第三阶段返程
- TabLayout的使用
- VS2015 Git 插件使用教程
- 将字符串"BASIC"按照相反顺序输出