python - 我想知道当递归函数能够在没有返回调用的情况下到达其主体的末尾时会发生什么?
问题描述
我最近在更新关于快速排序算法的知识。我知道列表(Python)是通过引用传递的,因此对其条目所做的任何更改都会反映在函数调用之外。该算法使用没有返回语句的递归。我想知道函数到达其主体末尾后会发生什么。return 语句(如果存在)在“弹出”堆栈之前将一个值传回给直接调用者(如果我错了,请纠正我)。这将继续发生,直到到达最后一个调用者。如果没有返回调用,那么是否会发生上述过程?
def quick_sort(arr,low,high):
# the Breaking statement
if (low < high):
# Partitoning
div = partition(arr,low,high)
quick_sort(arr,low,div)
quick_sort(arr,div+1,high)
def partition(arr,low,high):
pivot = arr[low]
minIndex = low;
for i in range(low+1,high):
if arr[i] <= pivot:
minIndex += 1
arr[minIndex],arr[i] = arr[i],arr[minIndex]
arr[minIndex],arr[low] = pivot,arr[minIndex];
return minIndex
解决方案
当 python 函数到达终点时,它返回 None。
https://www.askpython.com/python/python-return-statement
所以最后一次调用quick_sort
返回 None,然后前一个调用返回 None,直到它到达自己的末尾,依此类推,直到第一次调用。
但是由于您不使用quick_sort
(至少在您提供的代码中)的返回值,因此返回值无关紧要。
推荐阅读
- c# - 如何在excel底部添加额外的信息栏?
- java - 根据条件拆分对象集合
- c# - 在 Windows 10 上将 .NET Core 控制台应用程序切换到全屏模式
- amazon-web-services - EC2 实例连接:设置实例连接时出现问题
- javascript - 为什么在 Javascript 中使用 async 而不使用 await?
- sql - 使用 LEFT JOIN 和 ON 语句仅选择最接近的值
- c# - 如何使统一的 Random.Range() 更加随机?
- vim - Vim 光标轨迹
- logging - 哪些层应该记录异常?
- python - Pyplot一一改变颜色不起作用