首页 > 解决方案 > 我想知道当递归函数能够在没有返回调用的情况下到达其主体的末尾时会发生什么?

问题描述

我最近在更新关于快速排序算法的知识。我知道列表(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

标签: pythonrecursion

解决方案


当 python 函数到达终点时,它返回 None。

https://www.askpython.com/python/python-return-statement

所以最后一次调用quick_sort返回 None,然后前一个调用返回 None,直到它到达自己的末尾,依此类推,直到第一次调用。

但是由于您不使用quick_sort(至少在您提供的代码中)的返回值,因此返回值无关紧要。


推荐阅读