2 回答
TA贡献1802条经验 获得超5个赞
据我所知,你想递归地找到所有中奖号码的组合。例如,
package main
import "fmt"
func combinations(n []int, c []int, ccc [][][]int) [][][]int {
if len(n) == 0 {
return ccc
}
if len(ccc) == 0 {
ccc = make([][][]int, len(n))
}
for i := range n {
cc := make([]int, len(c)+1)
copy(cc, c)
cc[len(cc)-1] = n[i]
ccc[len(cc)-1] = append(ccc[len(cc)-1], cc)
ccc = combinations(n[i+1:], cc, ccc)
}
return ccc
}
func main() {
n := []int{1, 2, 3, 4}
fmt.Println("winning numbers", n)
fmt.Println()
nw := 0
w := combinations(n, nil, nil)
fmt.Println("winning tickets:")
d := " digit : "
for i := range w {
fmt.Print(i+1, d)
d = " digits: "
for j := range w[i] {
nw++
fmt.Print(w[i][j], " ")
}
fmt.Println()
}
fmt.Println()
fmt.Println(nw, "winners")
}
输出:
winning numbers [1 2 3 4]
winning tickets:
1 digit : [1] [2] [3] [4]
2 digits: [1 2] [1 3] [1 4] [2 3] [2 4] [3 4]
3 digits: [1 2 3] [1 2 4] [1 3 4] [2 3 4]
4 digits: [1 2 3 4]
15 winners
简化一下,你可以看到递归。
func combinations(n []int) {
if len(n) == 0 {
return
}
for i := range n {
combinations(n[i+1:])
}
return
}
递归在 时终止len(n) == 0。在 for 循环中,i增加到len(n)-1、combinations(n[i+1:])变成combinations(n[len(n):])、 和len(n[len(n):]) == 0,这将终止递归。
TA贡献2003条经验 获得超2个赞
递归不是语言特定的概念。如果您知道什么是递归,并且知道如何在 Go 中编写函数,那么您就可以在 Go 中编写递归函数。
这是 Go 中的虚拟递归函数。
func f(n int) int {
if n < 0 {
return 0 // or something else
}
if n == 0 {
return 1
}
return n * f(n - 1)
}
这是 Go 中的递归函数,因为,
它有一个终止(基本)条件(n <= 0)
对于所有 x < n,f(n) 取决于 f(x)。
它是用 Go 编写的。
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报