1.定义:方法调用自身。递归算法可以缩小规模,递归方法调用自身,但是参数不一样。递归可以用循环(递推,迭代)或者栈来代替

2.递归三要素:边界条件,递归关系式,参数返回值(递归方法,参数不一样

3.递归算法的时间复杂度

(1)递归算法的时间复杂度= 递归的次数 * 每次递归的时间复杂度

  递归次数和递归深度有关,递归次数就是递归二叉树的节点个数

(2)很多时候,递归可以抽象成一棵二叉树,时间复杂度和二叉树的节点个数有关(递归的次数就是节点的个数)

  满二叉树节点个数:2n-1(n代表层数)第i层有:2i-1个节点

(3)不要一看到递归就想到O(logn)

4.递归算法的空间复杂度

(1)递归算法的空间复杂度 = 递归深度 * 每次递归的空间复杂度

(2)空间复杂度与递归的深度有关:递归深度就是调用栈的深度,就是递归二叉树的深度

 5.递归的每个方法(每次递归)都有自己独立的变量。对于所有递归都操作的同一个变量(共享变量),应该放在递归方法外面。(二叉树递归遍历)

6.经典递归案例:(1)求阶乘(2)求x的n次方(3)斐波那契

7.空间复杂度:O(1),O(n)比较多。在递归的时候,会出现O(logn)的空间复杂度

8.递归方法的归就是迭代方法的迭代

9.递归是用栈实现的

10.递归遍历二叉树是,List<Integer>是共享变量,要放在参数中

 

1.二分查找

(1)非递归实现

 1     public static int binarySerach(int[] arr,int key) {
 2         int left=0;
 3         int right=arr.length-1;
 4         
 5         while(left<=right) {
 6             int mid=(left+right)/2;
 7             if(key==arr[mid])
 8                 return mid;
 9             if(key<arr[mid])
10                 right=mid-1;
11             if(key>arr[mid]) 
12                 left=mid+1;
13         }
14         return -1;
15     }
View Code

相关文章:

  • 2021-07-08
  • 2021-07-24
猜你喜欢
  • 2022-12-23
  • 2021-12-19
  • 2022-02-23
  • 2021-09-05
  • 2021-12-12
  • 2021-06-22
  • 2021-09-26
相关资源
相似解决方案