您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
在学习数据结构与算法的时候,一旦出现递归就很难理解,对于递归有没有什么好的理解方法?
递归,算法,下限在学习数据结构与算法的时候,一旦出现递归就很难理解,对于递归有没有什么好的理解方法?
发布时间:2020-12-06加入收藏来源:互联网点击:
在学习数据结构与算法的时候,一旦出现递归就很难理解,对于递归有没有什么好的理解方法?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
这几天正好在回顾以前写的算法demo,发现递归在很多算法之中得到广泛的应用,比如自己写的快速排序,二分查找等算法demo中均有应用;
我总结了递归的几个要素,只要掌握了就可以轻松写出递归代码(比如方法为search1);
1,递归的动力:比如说二分查找(找到某个有序数组中指定的某个数N,二分查找采取不断比较中间值的方式,并收缩上下限,直到查到指定的值或者退出),不断地比较中间的值,这就是递归下去的动力,写伪代码 return search1,这一句就代表递归;
2,递归的对象:上面说的有序数组就是递归的对象,写伪代码如下:return search1(array);
3,递归的分支:上面说了,二分查找的递归需要朝数组的两个方法递归,所以需要选择,并且更改条件,写伪代码如下:if(up) search1(array,index1,index2,N)if(down) search1(array,index3,index4,N)
4,递归的结束:递归的结束无外乎是找到了值,或者不满足递归动力了(比如说数组下限大于上限了),伪代码如下:if(下限大于上限 || Narray[array.length-1] )if(array[index] == N) return index;
5,让递归结束:的算法整个过程中,能让递归结束的只有下标的不断变化,因为每次都是找上下限的中间值,所以算法为int mid = (begin + end)/2;
最后的代码如下:
public static int search1(int[] arr, int begin, int end, int N) { int mid = (begin + end) / 2; //算法保证变化 if (N < arr[begin] || N > arr[end] || arr[begin] > arr[end]) { //控制结束,指标下限超过上限 return -1; } if (arr[mid] < N) {//小于,则向下递归 return search1(arr, mid + 1, end, N); } else if (arr[mid] > N) {//大于,则向上递归 return search1(arr, begin, mid - 1, N); } else return mid; //相等的时候,控制结束 }
递归讲解就到这了,需要二分法算法和快速排序Demo的也可以私我,更多的技术分享,敬请关注。。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |