using namespace std
//递归实现数组中的最大值
int diGui(int* p, int Lp, int Rp) {
int Lm, Rm
if (Lp == Rp) {
return p[Lp]
}
else {
Lm = diGui(p, Lp, (Lp + Rp) / 2)
Rm = diGui(p, (Lp + Rp)/ 2+1, Rp)
cout << "Lm:" << Lm << endl
cout << "Rm:" << Rm << endl
if (Lm > Rm) {
return Lm
}
else {
return Rm
}
}
}
int diGui2(int s[],int len) {
//为1表示只有一个元素
if (len == 1) {
return s[0]
}
else {
int max = diGui2(s, len-1)
cout << max<<endl
if (max >= s[len - 1]) {
return max
}
else {
return s[len - 1]
}
}
}
int main() {
//1.有两个整型数组x和y,长度分别为N和M,编写程序将x数组中不在y数组里出现的元素输出。
//声明两个整型数组x,y
int x[5] = { 1,2,-2,5,6 }
int y[7] = { -4,-3,2,5,7,8,9 }
int flag
//双层循环判断,x数组的每一个元素是否在y数组中
for (int i = 0
flag = 0
for (int j = 0
//有相同元素的时候,flag设置为1,并且跳出内层循环
if (x[i] == y[j]) {
flag = 1
break
}
}
if (flag == 0) {
cout << x[i]<<endl
}
}
cout << "-------------------" << endl
//2.实现矩阵匹配,找一个较小矩阵在一个较大矩阵中的位置,并输出其左上角的位置
//定义大矩阵和小矩阵
int Barr[5][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25} }
int Sarr[2][2] = { {3,4},{8,9} }
int i, j, r, c, F=0, count
for (i = 0
for (j = 0
if (Barr[i][j] == Sarr[0][0] && i + 2 <= 5 && j + 2 <= 5) {
count = 0
for (r = 0
for (c = 0
if (Barr[i + r][j + c] == Sarr[r][c]) {
count++
}
}
}
if (count == 2 * 2) {
F = 1
cout << "i:" <<i<<",j:"<<j<< endl
}
}
}
}
if (F == 0) {
cout << "没有找到!" << endl
}
cout << "-------------------" << endl
//3.通过递归和二分法查找,求一个数组的最大值
//第一种:采用二分法递归得出
int arr3[7] = { 2,4,8,-2,8,10,6 }
int max = diGui(arr3, 0, 6)
cout << "数组最大的值为:" <<max<< endl
//2.采用单纯递归求出
cout << "数组最大的值为:" << diGui2(arr3,7) << endl
return 0
}