1. 递归(自己调用自己)
迭代[就是不断循环]
例:计算阶乘 ( n!=n * (n-1) ! )
用递归实现:
//递归法求n的阶乘
public int Multi(int n){
if (n==0) {
return 1;
}
return n*Multi(n-1);
}
用迭代实现:
//迭代法求n的阶乘
public int MultiFor(int n){
if (n==0) {
return 1;
}
int mut=1;
for (int i = 1; i <= n; i++) {
mut=mut*i;
}
return mut;
}
2. 递归折半查找【数组是有序的必须,否则不能使用折半处理】
迭代折半查找:
//迭代的折半查找
public int BinarySearchF(int []arr,int key){
int left=0,right=arr.length-1;
while (left<=right) {
int middle=(left+right)/2;
if (arr[middle]>key) {
right=middle-1;
}else if (arr[middle]<key) {
left=middle+1;
}else {
return middle;
}
}
return -1;
}
//递归的折半查找 方法的参数不同
public int BinarySearchD(int []arr,int key,int left,int right){
if (left<=right) {
int mid=(left+right)/2;
if (key<arr[mid]) {
right=mid-1;
return BinarySearchD(arr, key, left, right);//递归
}else if (key>arr[mid]) {
left=mid+1;
return BinarySearchD(arr, key, left, right);//递归
}else {
return mid;
}
}
return -1;
}
3. 递归 排列组合 Permutations{递归实现的算法}
上图例是abc所有的排列组合.
//递归实现排列组合
public void getPermutations(char c[],int begin,int end){
// abc 所有排列组合
//方法 二
if (begin==end) {
for (int i = 0; i <= end; i++) {
System.out.print(c[i]);
}
System.out.println();
}else {
for (int i = begin; i <= end; i++) {
swap(c,begin, i);
getPermutations(c, begin+1, end);
swap(c,begin, i);
}
}
//方法 一:实例
// //a开头
// swap(c[0],c[0]);
// getPermutations(c, 1, 2);
// swap(c[0],c[0]);
// //b开头
// //交换,将b放到开头
// swap(c[0],c[1]);
// getPermutations(c, 1, 2);
// //还原
// swap(c[0],c[1]);
// //c开头
// //交换,将c放到开头
// swap(c[0],c[2]);
// getPermutations(c, 1, 2);
// swap(c[0],c[2]);
}
//交换方法
private void swap(char tc[] ,int a, int b){
char tp = tc[a];
tc[a] = tc[b];
tc[b] = tp;
}