簡體   English   中英

遞歸函數什么都不返回?

[英]Recursive function returning none?

我編寫了以下函數,以實現自己的二進制搜索

def bisect(input, target):
    mid = len(input)/ 2
    if len(input) == 1:
        if input[0] == target:
            return 1
        else:
            return None
    elif input[mid] > target:
        bisect(input[:mid], target)
    elif input[mid] <= target:
        bisect(input[mid:], target)

我知道我的實現已經關閉,但是我對理解遞歸堆棧更加好奇。

當我調用bisect(['d','e'], 'd') ,我的函數應返回的值

bisect(['d'], 'd')

但是它返回None。 此外,當我直接調用bisect(['d'], 'd') ,得到的正確值為0。這怎么可能?

您將忽略遞歸調用的返回值。 您還需要顯式返回那些:

elif input[mid] > target:
    return bisect(input[:mid], target)
elif input[mid] <= target:
    return bisect(input[mid:], target)

遞歸調用與其他任何函數調用一樣; 他們將結果返回給調用者。 如果您忽略返回值,然后調用函數結束,那么您將以該調用函數結束,然后返回None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM