亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數在返回語句時不退出

函數在返回語句時不退出

Go
躍然一笑 2023-05-15 14:44:07
我有一個奇怪的問題。我在玩圍棋時發現了一些我無法理解的非常奇怪的行為。當我運行該findMatchingSum函數時,它會搜索預期的總和,如果總和更大,我將最后一個索引減 1,如果更大,則將第一個索引增加一個。但是,當我調試代碼時,它首先遇到 if 語句并且應該返回 true,但是它直接運行并運行最后一個 else if 語句?;靵y從這里開始。在第 3 次迭代中,它命中了進入該塊的 if 語句,但沒有退出該函數。這是代碼;package mainimport "fmt"var arr  = []int{1,2,4,4}func main() {    s := findMatchingSum(arr, 8, len(arr) - 1, 0)    fmt.Println(s)}func findMatchingSum(arr []int, sum , last, first int ) bool {    if arr[first] + arr[last] == sum {        return true    } else if  arr[first] + arr[last] > sum {        findMatchingSum(arr, sum, last - 1, first)    } else if arr[first] + arr[last] < sum {        findMatchingSum(arr, sum, last, first + 1)    }    return false}
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

你忘了從 else-if 分支“返回”。這應該有效:


func findMatchingSum(arr []int, sum , last, first int ) bool {

    if arr[first] + arr[last] == sum {

        return true

    } else if  arr[first] + arr[last] > sum {

        return findMatchingSum(arr, sum, last - 1, first)

    } else if arr[first] + arr[last] < sum {

        return findMatchingSum(arr, sum, last, first + 1)

    }

    return false

}

如果不這樣做,第三個分支將被執行,但函數不會退出——它會跳轉到下一條指令,即“return false”。


查看完整回答
反對 回復 2023-05-15
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號