下面是一个最简单的二分法递归实现快速查找的例子,之所以把这么简单的例子写上来是觉得这个小例子可以很好地说明递归的用法和使用技巧。
def find(n,array): left = 0 right = len(array)-1 while left <= right: mid = (left+right)//2 if n == array[mid]: print(n) return True if n > array[mid]: left = mid + 1 if n < array[mid]: right = mid -1 return False array = range(0,1000000) flag = find(45,array) print(flag)
二分法的思想很简单,二分查找其实就是这样:数组不断裂变成原来的一半,(最坏情况下)最终到只剩一个元素。而运气好的时候,某一次的中间值刚好就等于你要找的那个值。
对于递归思想:1.要有递归结束条件。没有结束条件的递归会无线循环递归下去,就好像一直被命令往下到无底深渊却没有接到返回来的命令。这个例子中结束条件就是
n == array[mid]
返回True, left<=right,而left和right又都会随着计算而变化。
2.递归函数是在条件符合的情况下一直不断地调用自己,这个时候最重要关注的应该就是调用函数时需要传入的参数了,这个参数是符合本次情景改变之后的参数。更复杂的递归也是符合这两条基本思路。
本文出自 “心之所向素履以往” 博客,请务必保留此出处http://jwlin.blog.51cto.com/7560932/1768113
原文地址:http://jwlin.blog.51cto.com/7560932/1768113