上学的时候老师说人理解循环,神理解递归。递归在排序算法中经常能看到。
一,什么是递归
??递归就是方法自己调用自己,所有的循环都可以改写为递归,但是递归并不一定能改写为循环。
二,递归的实现
package com.hzc.recursion;
public class RecursionDemo01 {
public static void main(String[] args) {
System.out.println(byFor(100));
System.out.println(byRecursion(100));
}
public static Long byFor(int n){
Long l = 0L;
for (int i=1; i<=n; i++){
l = l + i;
}
return l;
}
public static Long byRecursion(int n){
if (n == 1){
return 1L;
}else {
return byRecursion(n-1) + n;
}
}
}
三,递归的实现(求数组最大值)
package com.hzc.recursion;
import java.util.Arrays;
public class RecursionDemo02 {
public static void main(String[] args) {
int[] arr = new int[]{1,3,4,6,88,34,100,7,2};
System.out.println(byFor(arr));
System.out.println(byRecursion(arr, 0, arr.length-1));
}
public static int byFor(int[] arr){
int max = 0;
for (int i=0; i<arr.length; i++){
if (arr[i] > max){
max = arr[i];
}
}
return max;
}
public static int byRecursion(int[] arr, int l, int r){
if (l == r){
return arr[l];
}else {
int a = arr[l];
int b = byRecursion(arr, l+1, r);
if (a > b){
return a;
}else {
return b;
}
}
}
}
四,递归的实现(斐波那契数列)
package com.hzc.recursion;
public class RecursionDemo03 {
public static void main(String[] args) {
System.out.println(byRecursion(20));
}
public static int byRecursion(int n){
if (n == 1){
return 1;
}else if (n == 2){
return 1;
}
return (byRecursion(n-1) + byRecursion(n-2));
}
}
|