Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membaca Integer daripada Input Dipisahkan Angkasa di Golang: Pendekatan Rekursif?

Bagaimana untuk Membaca Integer daripada Input Dipisahkan Angkasa di Golang: Pendekatan Rekursif?

DDD
DDDasal
2024-10-30 21:01:30127semak imbas

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

Baca Integer daripada Input Diasingkan Angkasa di Golang: Pendekatan Cekap

Dalam pengaturcaraan, membaca set integer yang dipisahkan oleh ruang daripada input standard dan menyimpannya dalam tatasusunan dengan cekap adalah tugas biasa. Satu cara untuk mencapai ini ialah menggunakan gelung mudah untuk. Walau bagaimanapun, terdapat teknik yang memanfaatkan rekursi untuk meminimumkan kod sambil mengekalkan prestasi optimum.

Menggunakan Rekursi Tanpa Gelung Eksplisit

Coretan kod Go berikut menunjukkan cara membaca integer daripada input standard tanpa menggunakan gelung for atau 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>

Contoh Output

Andaikan input standard mengandungi integer:

Enter the number of integers
3
Enter the integers
23 45 66

Menjalankan program akan mengeluarkan:

[23 45 66]

Mengoptimumkan Pengimbasan Input

Untuk mengoptimumkan lagi pengimbasan input, pertimbangkan untuk menggantikan fungsi fmt.Scan dalam ReadN dengan pembaca tersuai yang membolehkan pemprosesan input lebih pantas:

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

Dalam pelaksanaan yang dioptimumkan ini, pembaca tersuai dicipta dengan val medan untuk memegang nilai integer. Kaedah Baca menggunakan fmt.Scanf untuk membaca integer daripada input standard dan menyimpannya dalam val. Apabila membaca daripada pembaca tersuai, hanya satu bait diproses, dengan ketara mengurangkan overhed.

Dengan menggabungkan teknik ini, anda boleh membaca set integer dengan cekap daripada input standard di Golang, memaksimumkan prestasi sambil meminimumkan kerumitan kod.

Atas ialah kandungan terperinci Bagaimana untuk Membaca Integer daripada Input Dipisahkan Angkasa di Golang: Pendekatan Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn