首页 > 解决方案 > 递归返回函数

问题描述

理解return语句的使用recursion

例如在二分搜索中:

def binary_search_recur(array,start,end,item):

    middle = int((start+end)/2)
    #print (middle)
    if (start>end):
        return -1
    else:   
        if array[middle]==item:
            return middle
        elif array[middle]>item:
            return binary_search_recur(array,start,middle-1,item)
        else:
            return binary_search_recur(array,middle+1,end,item)

调用函数

array = [27,45,76,81,92,101,291]
binary_search_recur(array,0,len(array)-1,27)

如果我在任何地方添加语句都可以正常工作,但如果我删除如下return语句,它不会返回0(示例中搜索元素的索引)return

else:   
      if array[middle]==item:
           return middle
      elif array[middle]>item:
           binary_search_recur(array,start,middle-1,item) #retrun statement removed
      else:
           binary_search_recur(array,middle+1,end,item)   #retrun statement removed

我的意思是,当我找到元素时我想返回,所以我返回索引middle,或者如果元素根本不存在,那么在这种情况下我返回-1,否则我只是用更新startend索引递归调用函数,只是像归并排序

merge_sort(l)
merge_sort(r)
merge(l,r,array)

所以我不明白为什么删除return示例中的语句不会返回操作。任何建议都会很棒。

标签: pythonrecursionbinary-search

解决方案


循环函数的想法是它使用新参数或最终值返回自身的新执行。

您需要在循环循环中返回下一个方法的结果。如果不是,Python 返回 None 并且内部循环函数的结果不会保存在任何地方。


推荐阅读