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中文網其他相關文章!