[Python] Recursion Binary Search

Discussão em 'Python' iniciado por Stack, Março 12, 2025.

  1. Stack

    Stack Membro Participativo

    I have a binary_search function which traverses through a given list and returns an array with all indexes at which there is a certain searched value:

    from math import *

    def binary_search(nums, lower_index, upper_index, searched_value, result_arr):
    if (upper_index < lower_index):
    return result_arr

    midpoint = (upper_index + lower_index) // 2

    if nums[midpoint] == searched_value:
    result_arr.append(midpoint)

    binary_search(nums, midpoint+1, upper_index, searched_value, result_arr)
    binary_search(nums, lower_index, midpoint-1, searched_value, result_arr)

    return result_arr
    elif nums[midpoint] > searched_value:
    upper_index = midpoint - 1
    binary_search(nums, lower_index, upper_index, searched_value, result_arr)
    elif nums[midpoint] < searched_value:
    lower_index = midpoint + 1
    binary_search(nums, lower_index, upper_index, searched_value, result_arr)


    def main():
    nums = [-2, -1, 1, 3, 4, 5, 5, 5, 5, 7]
    lower_index = 0
    upper_index = len(nums)-1
    searched_value = 5
    result_arr = []
    print(nums)
    print(f'Found_indexes: {binary_search(nums, lower_index, upper_index, searched_value, result_arr)}')
    print(result_arr)

    if __name__ == "__main__":
    main()


    My question is why does function call in main return None but print(result_arr), predictably, because it is passed by reference, returns proper indexes.

    [-2, -1, 1, 3, 4, 5, 5, 5, 5, 7]
    Found_indexes: None
    [7, 8, 5, 6]


    I know that if I put return statements next to binary_search calls in both "elif blocks" I will correctly get an array from function call in main, but I do not understand why I need them? As far as I'm concerned all that is happening in following recursion calls from the very root to all branches is appending to an array which is passed by reference and the "last" call will return result_arr from the first if.

    Can somebody explain what am I missing? Thanks in advance.

    Continue reading...

Compartilhe esta Página