F# 为什么这个二进制搜索函数不返回5?
这个f程序对int数组进行二进制搜索,以查找第一个出现的数字。一旦找到号码,它就会打印位置,然后返回。然后打印返回值,但打印不同的数字。我期待着同样的数字。为什么不同F# 为什么这个二进制搜索函数不返回5?,f#,F#,这个f程序对int数组进行二进制搜索,以查找第一个出现的数字。一旦找到号码,它就会打印位置,然后返回。然后打印返回值,但打印不同的数字。我期待着同样的数字。为什么不同 let int_array = [| 1; 3; 3; 4; 4; 5; 5; 6; 6; 6; 6; 6; 6; 6; 6; 6; 6; 6; 8; 9|] let binary_search target (array:int[]) = let rec bsearch found_pos start_i end_i
let int_array = [| 1; 3; 3; 4; 4; 5; 5; 6; 6; 6; 6; 6; 6; 6; 6; 6; 6; 6; 8; 9|]
let binary_search target (array:int[]) =
let rec bsearch found_pos start_i end_i =
let mid_i = start_i + (end_i-start_i) / 2
if start_i = end_i then
printfn "answer is %d" found_pos
found_pos
elif array.[ mid_i ] = target then
bsearch mid_i start_i mid_i-1
elif array.[ mid_i ] < target then
bsearch found_pos (mid_i+1) end_i
else
bsearch found_pos start_i (mid_i-1)
bsearch -1 0 ((Array.length array)-1)
let ans = binary_search 5 int_array
printfn "but it returns %d" ans
你的问题是缺少括号。代码b搜索中i启动中i启动中i启动中i-1与b搜索中i启动中i启动中i-1相同。如果将其更改为“搜索中间i开始中间i-1”,则第一个和最后一个结果将是相同的。您的问题是缺少括号。代码b搜索中i启动中i启动中i启动中i-1与b搜索中i启动中i启动中i-1相同。如果您将其更改为b搜索mid_i启动mid_i-1,则第一个和最后一个结果将是相同的。为什么不使用调试器来遍历代码?是的。这没有什么帮助。为什么不使用调试器来遍历代码呢?是的。这没用。
answer is 5
but it returns 3