[英]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.