1丶求n的阶乘
public static int fac(int n){
int sum = 1;
if(n == 1){
sum = 1;
}else{
sum = fac(n-1)*n;
}
return sum;
}
2丶汉诺塔问题
public static void move(char pos1,char pos2){
System.out.println(pos1+"==>"+pos2);
}
public static void hanio(int n,char pos1,char pos2,char pos3){
if(n == 1){
move(pos1,pos3);
}else{
hanio(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanio(n-1,pos2,pos1,pos3);
}
}
3丶斐波那契数列前n项和
public static int fibonaci(int n) {
int fn = 1;
if (n <= 0) {
return -1;
}
if (n == 1) {
return fn;
} else if (n == 2) {
return ++fn;
} else {
return fn + fibonaci(n - 2) + fibonaci(n - 1);
}
}
4丶二分查找
public static int binarySearch(int[] array,int left,int right,int key){
while (left <= right){
int middle = (left + right)>>1;
if(key == array[middle]){
return middle;
}else if(key < array[middle]){
return binarySearch(array,left,middle - 1,key);
}else {
return binarySearch(array,middle + 1,right,key);
}
}
return -1;
}
5丶分析递归的优点和缺点
优点:代码量少,可读性强。结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。
缺点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。