首页  >  文章  >  后端开发  >  如何在 Golang 中从空格分隔的输入中读取整数:递归方法?

如何在 Golang 中从空格分隔的输入中读取整数:递归方法?

DDD
DDD原创
2024-10-30 21:01:30131浏览

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]

优化输入扫描

要进一步优化输入扫描,请考虑用自定义阅读器替换ReadN中的fmt.Scan函数可以实现更快的输入处理:

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

在此优化实现中,使用字段 val 创建自定义读取器来保存整数值。 Read 方法使用 fmt.Scanf 从标准输入读取整数并将其存储在 val 中。从自定义读取器读取时,仅处理一个字节,从而显着减少开销。

通过结合这些技术,您可以高效地从 Golang 中的标准输入读取整数集,从而最大限度地提高性能,同时最大限度地降低代码复杂性。

以上是如何在 Golang 中从空格分隔的输入中读取整数:递归方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn