算法导论第五章实例伪码转C++_最大子数组
来源:互联网 发布:设计logo用什么软件 编辑:程序博客网 时间:2024/06/05 18:55
1. 犯了一个错误,引发出对递归中变量定义的思考 P71
递归中要看变量的使用范围,以及如果作为全局,下面语句是否会修改其值
#include<iostream>
#include<climits>
using namespace std;
//find_maximum used
//int mid; 这里犯了一个错误,看下面 ,递归中用变量,要考虑其是局部全局
int mleft_sum,mleft_low,mleft_high;
int mright_sum,mright_low,mright_high;
int mcross_sum,mcross_low,mcross_high;
int result_low,result_high;
//find_max_crossmid used
int left_sum,right_sum,sum;
int A[16] = {13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
int find_max_crossmid(int a[],int low,int mid, int high, int& max_left, int& max_right)
{
left_sum = INT_MIN;
sum = 0;
for (int i = mid; i >= low; i--)
{
sum = sum + a[i];
if (sum > left_sum)
{
left_sum = sum;
max_left = i;
}
}
right_sum = INT_MIN;
sum = 0;
for (int j = mid + 1; j <= high; j++)
{
sum = sum + a[j];
if (sum > right_sum)
{
right_sum = sum;
max_right = j;
}
}
return (left_sum + right_sum);
}
int find_maximum(int a[],int low, int high)
{
if (low == high)
{
result_low = low;
result_high = high;
return a[low];
}
else
{
int mid = (low + high)/2;
//问题在这里,mid 是全局变量结果就不一样,这是必须是局部变量,否则下面
//第一行就改变了mid的值,第二行用的mid就是下次递归的mid
//而作为局部变量,其适用范围确定,编译时会产生mid1,mid2。。。不用担心重复定义
mleft_sum = find_maximum(a,low,mid);
mright_sum = find_maximum(a,mid + 1,high);
mcross_sum = find_max_crossmid(a,low,mid,high,mcross_low,mcross_high);
if ((mleft_sum >= mright_sum) && (mleft_sum >= mcross_sum))
{
result_low = mleft_low; result_high = mleft_high;
return mleft_sum;
}
else if ((mright_sum >= mleft_sum) && (mright_sum >= mcross_sum))
{
result_low = mright_low; result_high = mright_high;
return mright_sum;
}
else{
result_low = mcross_low; result_high = mcross_high;
return mcross_sum;
}
}
}
int main()
{
cout << find_maximum(A,0,15);
return 0;
}
0 0
- 算法导论第五章实例伪码转C++_最大子数组
- 算法导论_最大子数组问题(分治策略)
- 算法导论_最大子数组问题(分治策略)
- 算法导论第三章 最大子数组
- 算法导论—最大子数组C/C++实现
- 算法导论之最大子数组问题 C语言实现
- <算法导论》第四章的求最大子数组的C语言实现
- 算法导论第四章-最大子数组问题
- 【Coding算法导论】第4章:最大子数组问题
- [算法导论]分治法---最大子数组
- 算法导论之最大子数组问题
- 算法导论寻找最大子数组
- 算法导论2-最大子数组
- 算法导论,分治策略,最大子数组
- 【算法导论】最大子数组问题
- 算法导论 - 最大和连续子数组
- 算法导论--最大子数组问题
- 算法导论—最大子数组问题
- 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
- 使用物理引擎进行碰撞检测
- subl 2.2.2 lisence
- hdu 5015 233 Matrix(西安网络赛1009)【构造矩阵】
- joj 1131: Intersection (判断直线与矩形是否有交点) .
- 算法导论第五章实例伪码转C++_最大子数组
- XML Schema Generator
- linux下svn迁移
- 输入外挂
- EditText 边框
- New start
- 关于软中断原理,以及中断栈的概念等
- 有关C++模板(template)的编译错误“error LNK2019: 无法解析的外部符号”的分析
- mysqldump和source使用