1、Fibonacci数 1 2 3 5 8 13 21 34 35 89...(把们看到的经典编程兔子问题就是斐波纳契数列)
递归效率比较低
public static long fibonacci(int n){
if(n==1)
return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
当n=40时 计算机计算将近一分钟,然而这个基本计算只要计算39次
下面是递归的强大的作用
2、阶乘 求N!
public static int factorial(int n){
if(n<=1)
return 1;
else
return factorial(n-1)*n;
}
3、二分查找
public class BinarySearch{
public static int binarySearch(int[] a,int x){
return binarySearch(a,x,0,a.length-1);
}
public static int banarySearch(int[] a,int x,int low,int high){
if(low>high){
return Nofound;
}
int mid=(low+high)/2;
if(a[mid]<x)
return binarySearch(a,x,mid+1,high);
else if(a[mid]>x)
return binarySearch(a,x,low,mid-1);
else
return mid;
}
}
4、求两个数a和b的最大公约数
public static int gcd(int a,int b){
if(b==0)
return a;
else
return gcd(b,a%b);
}
另一种写法 实际是一样的
public static int gcd(int a,nit b){
return b==0?a:gcd(b,a%b);
}