分治法——习题
作者:互联网
1、用递归的方法求一个数组中的最大元素:
#include<stdio.h> int MAX(int a,int b){ if(a>b) return a; else return b; } int fmax(int a[],int i){ if(i==1) return a[0]; else return MAX(fmax(a,i-1),a[i-1]); } int main(){ int a[]={1,32,34,56,12}; int maxNum=fmax(a,5); printf("%d",maxNum); }
测试结果:
(1)从递归的角度分析:
每递归一次问题的规模减少1,直至递归到递归出口。
(2)从分治法的角度分析:
fmax(int a[],int i)将问题分解为:fmax(a,i-1)和a[i-1],直至将问题的规模缩小为1的时候可以直接调用MAX函数进行求解。
2、设有两个复数x=a+bi和y=c+di。复数乘积xy可以用四次乘法来完成,即:xy=(ac-bd)+(ad+bc)i,设计算法仅用三次乘法来求解
3、设有n个互不相同的整数,按递归顺序存放在数组中,若存在一个下标 i ,使得a[i]=i 。设计一个算法以O(log2n)时间找到这个下标。
void position(int a[],int l,int r){ int mid; while(l<r){ mid=(l+r)/2; if(a[mid]==mid) return mid; if(a[mid]<mid) l=mid+1; if(a[mid]>mid) r=mid-1; } rerurn -1;//未找到元素 }
标签:return,递归,int,MAX,分治,fmax,xy,习题 来源: https://www.cnblogs.com/zhai1997/p/12078174.html