Python:返回不在递归算法中执行

Python:返回不在递归算法中执行,python,algorithm,recursion,return,Python,Algorithm,Recursion,Return,我正在研究一种快速选择算法。我不完全确定我的算法是否正常工作,但我认为这与我看到的行为无关 我有一个带条件检查的递归算法,用于退出算法,返回打印最终quickselect解决方案。条件被触发,但我一直没有得到任何返回。所以我在返回之前添加了一个打印语句。print语句打印该值,但返回值仍然不返回任何值 这是我的密码。条件在第11行: #!/usr/bin/env python from random import randint def rSelect(arr, k, left=0, righ

我正在研究一种快速选择算法。我不完全确定我的算法是否正常工作,但我认为这与我看到的行为无关

我有一个带条件检查的递归算法,用于退出算法,返回打印最终quickselect解决方案。条件被触发,但我一直没有得到任何返回。所以我在返回之前添加了一个打印语句。print语句打印该值,但返回值仍然不返回任何值

这是我的密码。条件在第11行:

#!/usr/bin/env python
from random import randint

def rSelect(arr, k, left=0, right=None):
    if right == None:
        right = len(arr)
    if right == 1:
        return arr[k]
    else:
        j = partition(a,left, right)
        if j == k:
            print "arr: %s" % arr
            print "j: %s" % j
            print "arr[j]: %s" % arr[j]
            return arr[j]
        if j > k:
            rSelect(arr, k, left, j)
        if j < k:
            rSelect(arr, k-j, j+1, right)


def partition(a, l, r):
    """ randomized pivot """

    p = randint(l,r-1)
    a[l], a[p] = a[p], a[l]
    i = l + 1
    for j in range(l+1, r):
        if a[j] < a[l]:
            a[j], a[i] = a[i], a[j]
            i += 1
    a[l], a[i-1] = a[i-1], a[l]

    return i-1


a = [ 5,4,3,2,1 ]
print rSelect(a, 1)
#/usr/bin/env python
从随机导入randint
def R选择(arr,k,左=0,右=无):
如果右==无:
右=长(arr)
如果右==1:
返回arr[k]
其他:
j=分区(a、左、右)
如果j==k:
打印“arr:%s”%arr
打印“j:%s”%j
打印“arr[j]:%s”%arr[j]
返回arr[j]
如果j>k:
R选择(arr,k,左,j)
如果j
另外,您的脚本工作不正常,我将列表中的2改为16,结果不正确。另请参阅,还有更多内容。谢谢TigerHawkT3。我现在明白怎么回事了。