递归的几种应用

来源:互联网 发布:美国手机直播软件 编辑:程序博客网 时间:2024/05/16 10:52
package com.Animal;import org.junit.Test;public class TestDiGui {/* * n的阶乘  循环 *  * 5!= 5*4*3*2*1 *  * */@Testpublic void test1(){int n=5;int result=1;for(int i=1;i<=5;i++){result = result*i;}System.out.println(result);}/* * n的阶乘  递归 * 方法调方法 * 5!= 5*4*3*2*1 * 5!=5*4! * 4!=4*3! * 3!=3*2! * 2!=2*1! * 1!=1*1! * */@Testpublic void test2(){int n=5;int result = jcdg(n);System.out.println(result);}private int jcdg(int n) {  //  5!   if(n==1){return 1;}return n*jcdg(n-1);}/*  * 1  1  2  3   5    8     13 *  * 1 * 1 * 1   1 * 1   1   1 * 1   1   1   1    1 * 1   1   1   1    1    1   1   1   *  *  f(n) = f(n-1)+f(n-2)   斐波那契数列 * */@Testpublic void test3(){int n=12;int result = dgfbnq(n);System.out.println(result);}private int dgfbnq(int n) {if(n==1||n==2){return 1;}return dgfbnq(n-1)+dgfbnq(n-2);}// 循环 求斐波那契数列@Testpublic void test4(){int n=12;int n_1=1;int n_2=1;int result=0;for(int i=3;i<=n;i++){result = n_1+n_2;n_1=n_2;n_2=result;}System.out.println(result);}@Testpublic void test5(){/* * 二分法查找数组中的某个元素 找到返回 索引 找不到 返回-1 * 只能找有序的数组  * binarySearch() * */int[] arr={1,3,4,5,7,9,13};int index = findIndex(arr,0);System.out.println(index);}private int findIndex(int[] arr, int j) {/*for(int i=0;i<arr.length;i++){if(arr[i]==j){return i;}}return -1;*/int left=0;int right=arr.length-1;int middle=-1;while(left<=right){middle = (left+right)/2;if(arr[middle]==j){return middle;}else if(arr[middle]>j){right = middle-1;}else{left = middle+1;}}return -1;}@Testpublic void test6(){int[] arr={1,3,4,5,7,9,13};int left=0;int right=arr.length-1;int result = erfenDiGui(arr,left,right,0);   //  System.out.println(result);}private int erfenDiGui(int[] arr,int left,int right, int j) {int middle;if(left<=right){middle = (left+right)/2;if(arr[middle]==j){return middle;}else if(arr[middle]>j){right = middle-1;return erfenDiGui(arr,left,right,j);}else{left = middle+1;    //   return erfenDiGui(arr,left,right,j);}}return -1;}/*private int erfenDiGui(int[] arr, int j) {int left=0;int right= arr.length-1;int middle;if(left<=right){middle = (left+right)/2;if(arr[middle]==j){return middle;}else if(arr[middle]>j){right = middle-1;int[] arr2 = Arrays.copyOfRange(arr, 0, right+1);return erfenDiGui(arr2,j);}else{left = middle+1;int[] arr2 = Arrays.copyOfRange(arr, left, right+1);return erfenDiGui(arr2,j);}}return -1;}*/}

原创粉丝点击