簡體   English   中英

將迭代函數修改為遞歸

[英]modifying iterative function to be recursive

我有一個交互函數,它接受一系列整數並返回目標項目的索引位置或返回目標應插入的位置。(如果項目不在列表中

該函數效果很好,但我試圖找出在不借助任何輔助函數的情況下將該函數從迭代實現更改為遞歸實現的最精簡方法。

def binary_search(a_list, first, last, target):
    """a sequence of integers, index of first item, index of last item, target to search for """

    while first <= last:
        middle = (first + last) // 2
        if a_list[middle] == target:
            return middle
        if target < a_list[middle]:
            last = middle - 1
        else:
            first = middle + 1
    return first

print(binary_search([2, 5, 8, 11, 17], 0, 4, 5))

這個怎么樣:

def binary_search_recursive(a_list, first, last, target):
    middle = (first + last) // 2
    number = a_list[middle]

    if first > last:
        return first
    if number == target:
        return middle
    if target < number:
        return binary_search_recursive(a_list, first, middle-1, target)
    else:
        return binary_search_recursive(a_list, middle+1, last, target)

編輯:代碼中有一個小錯誤——現在更正了。

暫無
暫無

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

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