Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 为什么这个二进制搜索函数不返回5?_F# - Fatal编程技术网

F# 为什么这个二进制搜索函数不返回5?

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

这个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 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