python递归函数返回值
以下是用递归实现有序数组的二分查找Python代码
def binarysearch(seq, x, lower = 0, upper = None):
if upper == None: upper = len(seq) - 1
middle = (lower + upper) / 2
if x == seq[middle]:
return middle
elif x > seq[middle]:
lower = middle + 1
else:
upper = middle - 1
if upper < lower:
print x, 'is not in', seq
return
return binarysearch(seq, x, lower, upper) #此处必须加上return,否则函数总是返回None
if __name__ == '__main__':
seq = [34, 67, 8, 123, 4, 100, 95]
seq.sort()
y = binarysearch(seq, 34)
print y
递归过程:
第一次调用binarysearch函数 ——> 第二次调用binarysearch函数——> ...... ——> 第n次调用binarysearch函数
|
将return返回值返回第1次调用的binarysearch函数<——将return返回值返回第n-2次调用的binarysearch函数 <—— 将return返回值返回第n-1次调用的binarysearch函数
调用binarysearch函数,其最终的返回值就是第一次调用binarysearch函数的返回值,如果上述代码中不加标红的return关键字,第一次调用的binarysearch函数永远都是返回None