首頁 > 後端開發 > Golang > 如何在 Golang 中從空格分隔的輸入中讀取整數:遞歸方法?

如何在 Golang 中從空格分隔的輸入中讀取整數:遞歸方法?

DDD
發布: 2024-10-30 21:01:30
原創
251 人瀏覽過

How to Read Integers from Space-Separated Input in Golang: A Recursive Approach?

Golang 中從空格分隔的輸入中讀取整數:一種有效的方法

在編程中,從標準輸入並將它們有效地儲存在陣列中是一項常見任務。實現此目的的一種方法是使用簡單的 for 迴圈。然而,有一種技術可以利用遞歸來最小化程式碼,同時保持最佳效能。

在沒有明確循環的情況下使用遞歸

以下Go 程式碼片段示範如何閱讀不使用for 或goto 迴圈從標準輸入取得整數:

<code class="go">package main

import "fmt"

func main() {
    var n int
    fmt.Println(`Enter the number of integers`)
    if _, err := fmt.Scan(&n); err != nil {
        panic(err)
    }
    fmt.Println(`Enter the integers`)
    all := make([]int, n)
    ReadN(all, 0, n)
    fmt.Println(all)
}

// Recursively reads n integers into all starting from position i.
func ReadN(all []int, i, n int) {
    if n == 0 {
        return
    }
    if _, err := fmt.Scan(&all[i]); err != nil {
        panic(err)
    }
    ReadN(all, i+1, n-1)
}</code>
登入後複製

範例輸出

假設標準輸入包含整數:

Enter the number of integers
3
Enter the integers
23 45 66
登入後複製

執行程式將輸出:

[23 45 66]
登入後複製

<code class="go">type reader struct {
    val int
}

func (r *reader) Read(b []byte) (int, error) {
    w, err := fmt.Scanf("%d", &r.val)
    if err != nil {
        return w, err
    }
    b[0] = byte(r.val)
    return 1, err
}</code>
登入後複製

最佳化輸入掃描要進一步最佳化輸入掃描,請考慮用自訂閱讀器取代ReadN中的fmt.Scan函數可以實現更快的輸入處理: 在此最佳化實作中,使用欄位val 建立自訂讀取器來保存整數值。 Read 方法使用 fmt.Scanf 從標準輸入讀取整數並將其儲存在 val 中。從自訂讀取器讀取時,僅處理一個位元組,從而顯著減少開銷。 透過結合這些技術,您可以有效率地從 Golang 中的標準輸入讀取整數集,從而最大限度地提高效能,同時最大限度地降低程式碼複雜性。

以上是如何在 Golang 中從空格分隔的輸入中讀取整數:遞歸方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板