第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在golang中使用遞歸求數組中的平方和

在golang中使用遞歸求數組中的平方和

Go
滄海一幻覺 2023-03-29 15:19:34
所以我的朋友給了我這個任務,其中必須使用遞歸來計算正數的平方和。條件 - 輸入將是一個用空格分隔的數字的字符串這是我到目前為止所做的,但這顯示了一個runtime error.這是完整的錯誤https://ideone.com/53oOjNpackage mainimport(    'fmt',    'strings',    'strconv')var n int = 4var sum_of_squares int = 0func sumOfSquares(strArray []string, iterate int) int{    number, _ := strconv.Atoi(strArray[iterate])    if number > 0 {        sum_of_squares += number*number    }    if iterate == n {        return 0 // just to end the recursion    }    return sumOfSquares(strArray, iterate+1)}func main() {    str := "1 2 3 4"    strArray := strings.Fields(str)    result := sumOfSquares(strArray, 0)    fmt.Println(sum_of_squares, result)}
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

遞歸的經驗法則是終止條件。它應該存在,并且應該存在于正確的位置。


func sumOfSquares(strArray []string, iterate int) int{

    if iterate >= len(strArray) { 

        return sum_of_squares

    }

    number, _ := strconv.Atoi(strArray[iterate]) //TODO: handle err here

    sum_of_squares += number*number


    return sumOfSquares(strArray, iterate+1)

}

僅供參考:規(guī)范遞歸不應將其狀態(tài)保存到全局字段中。我建議使用以下函數簽名。


func sumOfSquares(strArray []string, iterate, currentSum int) int{

    //...    

    return sumOfSquares(strArray, iterate+1, sum_of_squares)

}

這樣您就不需要存儲sum_of_squares在某個地方。您只需將它傳遞給下一個函數調用。


查看完整回答
反對 回復 2023-03-29
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

package main


import (

    "fmt"

    "strconv"

    "strings"

)


var n int


func sumOfSquares(strArray []string, iterate int) int {

    number, _ := strconv.Atoi(strArray[iterate])

    if iterate == n {

        return number * number

    }

    return ((number * number) + sumOfSquares(strArray, iterate+1))

}


func main() {

    str := "1 2 3 4"

    strArray := strings.Fields(str)

    n = len(strArray) - 1

    result := sumOfSquares(strArray, 0)

    fmt.Println(result)

}

索引從 0 開始,因此長度減一。


正如@peterSO 指出的那樣,如果字符串包含不尋常的字符,它就不起作用,我沒有發(fā)布獲取輸入的正確答案,因為你似乎是初學者,但你可以閱讀輸入,而不是像這樣。


var inp []byte

var loc int


inp, _ = ioutil.ReadFile(fileName)

//add \n so that we don't end up running out of bounds,

//if last byte is integer.

inp = append(inp, '\n')



func scanInt() (res int) {

    if loc < len(inp) {

        for ; inp[loc] < 48 || inp[loc] > 57; loc++ {

        }

        for ; inp[loc] > 47 && inp[loc] < 58; loc++ {

            res = res<<3 + res<<1 + (int(inp[loc]) - 48)

        }

    }

    return

}

這更快并且只掃描整數,并跳過所有其他不尋常的字符。


查看完整回答
反對 回復 2023-03-29
?
qq_笑_17

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

我喜歡保持簡單。我也有一些 if 條件,但希望你喜歡它。


func sumOfSquares(numArr []string) int {

? ? i, err := strconv.Atoi(numArr[0])


? ? rest := numArr[1:]


? ? //Error checking

? ? if err != nil {

? ? ? ? fmt.Println(err)

? ? ? ? os.Exit(1)

? ? ? ? return 0

? ? }


? ? square := i * i


? ? // negative & last number

? ? if i < 0 && len(rest) == 0 {

? ? ? ? return square

? ? }


? ? // negative & not last number

? ? if i < 0 && len(rest) > 0 {

? ? ? ? return sumOfSquares(rest)

? ? }


? ? // last man standing

? ? if i >= 0 && len(rest) == 0 {

? ? ? ? return square

? ? }


? ? return square + sumOfSquares(rest)


}


查看完整回答
反對 回復 2023-03-29
  • 3 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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