package com.Animal;
import org.junit.Test;
public class TestDiGui {
/*
* n的阶乘 循环
*
* 5!= 5*4*3*2*1
*
* */
@Test
public 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!
* */
@Test
public 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) 斐波那契数列
* */
@Test
public 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);
}
// 循环 求斐波那契数列
@Test
public 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);
}
@Test
public 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;
}
@Test
public 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;
}*/
}
递归的几种应用
最新推荐文章于 2022-05-15 10:29:26 发布