欧几里得辗转相除
int gcd(int p,int q){
if(q == 0) return p;
int r = p % q;
return gcd(q,r);
}
递归的编写:
- 递归总是有一个最简单的情况——方法第一条语句总是包含return的条件语句。
- 递归总是尝试解决一个规模更小的问题。(通常,会有几个参数值一直缩小)。
- 递归调用的父问题和尝试解决的子问题之间不应该有交集。(比如操作的数组部分是不同的)
//二分查找
int erfen(int key,int a[],int lo,int hi){
if(lo > hi){
return -1;
}
int mid = lo + (hi-lo)/2;
if(key < a[mid]) return erfen(key,a,lo,mid-1);
else if(key > a[mid]) return erfen(key,a,mid+1,hi);
else return mid;
}
int main(){
int a[10] = {1,4,9,17,99,100};
cout << erfen(100,a,0,5); //最后的两个形参是数组的最小下标和最大下标
return 0;
}