算法入门———递归

本文详细介绍了递归的基本概念及其应用实例,包括经典的阶乘和斐波那契数列计算。此外还讲解了二分查找算法的实现,并通过示例展示了其使用方法。

递归:在定义自身的过程中,直接或间接调用自身的一种算法

最简单的递归示例:

阶乘

求n!

分析:

  n!等价于 n(n-1)!

这是一个典型的递归算法题

public int recursion(int n){

  if(n==0){

    return 1;

  }else{

    return n*recursion(n-1);

  }

}

 

/*
  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
    后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/

分析:

其实这就是Fibonacci(斐波拉契)数列的求解问题,当前项等于前两项之和。也是典型的递归算法

 

public int function(int n){

  if(n<=0){

    return 0;

  } else if(n==1 || n=2){

    return 1;

  }else{

    return function(n-2)+function(n-1);

  }

}

 

 

至此递归的两个经典算法题就算解决!

 

大部分算法题都是源于数学!

 

二分查找算法

public int binarySearch(int[] data, int left, int right,goal){

  int mid=(left+right)/2;

  if(left>right){

   return -1;

   }

  if(goal==dta[mid]){

    return goal;

  }else if(goal>data[mid]){

    return  binarySearch(data, mid+1, right,goal);

  }else if(goal<data[mid]){

    return binarySearch(data,left,mid-1,goal);

  }else{

    return -1;

  }

}

 

//测试

 public static void main(String[] args) {
    int[] arr = {4,3,5,2,0,8};
    //先排序
    Arrays.sort(arr);

  //注意这里是数组下标
    int result = binarySearch(arr, 0, arr.length-1, 100);
    System.out.println(result);
 }

 

二分查找算法还有其他思路,以后再补充

转载于:https://www.cnblogs.com/xiawenyu/p/5723673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值