递归算法中什么时候用return啥时候不用呢?

使用2个例子来说明:快速排序和二分查找

# 二分查找
def binarySearch (arr, l, r, x):
# 基本判断
if r >= l:
mid = (l + r)/2# 中间位置
if arr[mid] == x:
return mid
# 元素小于中间位置的元素,只需要再比较左边的元素
elif arr[mid] > x:
return binarySearch(arr, l, mid-1, x) # 这里就需要return,如果不加return,那么当前函数也就是栈底函数就没有返回指(假设这个函数调用两次,虽然第二次调用有返回值,但是没有变量的接收,那么当前函数就没有返回值了)但是这个函数是需要返回指的,矛盾,所以会报错。
# 元素大于中间位置的元素,只需要再比较右边的元素
else:
return binarySearch(arr, mid+1, r, x) # 当然这个也需要return else:
# 不存在
return -1
# 快速排序
def QuickSort(myList,start,end):
#判断low是否小于high,如果为false,直接返回
if start < end:
i,j = start,end
#设置基准数
base = myList[i] while i < j:
#如果列表后边的数,比基准数大或相等,则前移一位直到有比基准数小的数出现
while (i < j) and (myList[j] >= base):
j = j - 1
#如找到,则把第j个元素赋值给第个元素i,此时表中i,j个元素相等
myList[i] = myList[j]
#同样的方式比较前半区
while (i < j) and (myList[i] <= base):
i = i + 1
myList[j] = myList[i]
#做完第一轮比较之后,列表被分成了两个半区,并且i=j,需要将这个数设置回base
myList[i] = base
#递归前后半区
QuickSort(myList, start, i - 1) # 这里就不需要return,因为这个函数最后有return,并且这个返回值是myList,因为当前函数会返回已经被递归函数所修改的myList。所以最后return myList是可以去掉的
QuickSort(myList, j + 1, end)
return myList # 可以去掉

所以需不需要return?就看这个函数需不需要返回值,如果需要有返回值,那么一定得确保最后有返回值。

最新文章

  1. mysql 索引及其原理
  2. 第五百八十二天 how can I 坚持
  3. MyEclipse 2015优化技巧
  4. 复杂TableView在iOS上的性能优化
  5. Python socket编程应用
  6. C#程序设计六大原则记录
  7. swift UI特殊培训38 与滚动码ScrollView
  8. Android的actionBar的菜单使用-android学习之旅(四十三)
  9. 优化TestNG测试报告
  10. 关于ComboBox的控件事件CBN_SELCHANGE总是取到旧值的问题
  11. How to find SPRO path by t-code name
  12. 解决ubuntu系统中firefox无法播放网页版音乐播放器音乐
  13. 数组排序自定义comparator()
  14. 现在的企业用到的Java开发主流框架有哪些
  15. iOS设置图片名称、启动图片、防止TabBar图片和文字渲染
  16. Linux - awk 文本处理工具二
  17. MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
  18. JavaScript周报#183
  19. 【bzoj2656】[Zjoi2012]数列(sequence) 高精度
  20. 分布式存储系统 Ceph

热门文章

  1. 9、继续matlab数值分析
  2. Jmeter_Beanshell 返回值中提取参数值
  3. 数据分析系列篇:玩转excel
  4. 【狼】狼的unity3d脚本学习
  5. activiti7从act_ge_bytearray表中查询资源文件并保存到桌面文件夹中
  6. CMS 开发全过程介绍
  7. vue aliasConfig(模块别名配置)
  8. 浅析php-fpm和fastcgi的关系
  9. 在egg中配置 sequelize
  10. tcp - 传输控制协议 (TCP)