【问题标题】:Ternary search won't return answer [duplicate]三元搜索不会返回答案[重复]
【发布时间】:2020-08-03 04:39:10
【问题描述】:

我为递归三元函数编写了以下代码:

def ternary_search(start,stop,x,arr):
    pos1 = start + (stop-start)//3
    pos2 = stop - (stop - start)//3
    
    if (pos1<=pos2):
        val1 = arr[pos1]
        val2 = arr[pos2] 

        if val1 == x:
            print(pos1)
            return pos1
        elif val2 == x:
            print(pos2)
            return pos2

        if x < val1:
            ternary_search(start,pos1-1,x,arr)
        elif x > val2:
            ternary_search(pos2+1,stop,x,arr)    
        else:
            ternary_search(pos1+1,pos2,x,arr)
    else: 
        return -1

即使代码运行良好,我也没有得到返回值。

import numpy as np
a = np.arange(1,100,5) # array([ 1,  6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96])
pos = ternary_search(0,len(a),86,a)
print(pos == None)

输出:

17

True

【问题讨论】:

  • 你的返回值是什么意思?
  • 元素的位置。代码正确地将其打印为 17。我希望它也返回该值,以便 pos = 17

标签: python arrays algorithm ternary-search


【解决方案1】:

你应该在调用函数时添加return

if x < val1:
    return ternary_search(start,pos1-1,x,arr)
elif x > val2:
    return ternary_search(pos2+1,stop,x,arr)    
else:
    return ternary_search(pos1+1,pos2,x,arr)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多