Go 如何将累加器传递给递归函数?

Go 如何将累加器传递给递归函数?,go,recursion,Go,Recursion,(我是新来的。) 我正在处理这个leetcode问题: 主程序包 输入“fmt” func main(){ arrRes:=[]int{} 总务(5,arrRes) fmt.Println(arrRes) } func gen(numRows int,arrRes[][]int){ 生成(numRows、0、arrRes) } 函数生成(n int,级别int,arrRes[][]int){ 如果(n==级别){ 返回 } arr:=[]int{} 如果级别==0{ arr=append(arr

(我是新来的。)

我正在处理这个leetcode问题:

主程序包
输入“fmt”
func main(){
arrRes:=[]int{}
总务(5,arrRes)
fmt.Println(arrRes)
}
func gen(numRows int,arrRes[][]int){
生成(numRows、0、arrRes)
}
函数生成(n int,级别int,arrRes[][]int){
如果(n==级别){
返回
}
arr:=[]int{}
如果级别==0{
arr=append(arr,1)
}如果级别==1,则为else{
arr=append(arr,1,1)
}否则{
//把它拿出来
tmp:=arrRes[一级]
arr=梳(tmp)
}
arrRes=append(arrRes,arr)
建造(n级+1级,arrRes)
}
函数组合(arr[]int)[]int{
//arr类型初始化
tmpArr:=[]int{1}
对于i:=1;i一个切片是(基本上)三件事:长度、容量和指向底层数组的指针。Go中的所有内容都是按值传递的,因此当您向函数传递一个片时,您传递的是它的当前长度、当前容量和指针的内存地址。对函数内的长度和容量所做的更改是对副本的更改,不会影响长度h和在函数调用中作为参数传递的切片的容量

打印切片不会打印其基础数组,它会打印切片中可见的基础数组部分(如果len=0,则可能没有),基于(1)指向基础数组中假定切片可见的第一个元素的指针;(2)切片变量中的长度

如果要在函数内部修改切片的长度或容量,并且希望这些更改在函数外部可见,则可以返回切片以更新函数外部的上下文,如append所做的:

numbers := append(numbers, 27)
或者,您可以传入指向切片的指针:

func ChangeNumbersLenOrCap(numbers *[]int) {
    // make your changes, no return value required
}
对于您的程序,似乎可以使用指向int切片的指针:

var arrRes *[][]int
var arrRes *[]*[]int
…因为您没有跨另一个函数边界修改int切片。某些程序需要指向int切片指针切片的指针:

var arrRes *[][]int
var arrRes *[]*[]int
以下是一些简单的编辑,以帮助您开始:

    arrRes := [][]int{}
    gen(5, &arrRes)
    fmt.Println(arrRes) 
}

func gen(numRows int, arrRes *[][]int) { 

// ...

func build(n int, level int, arrRes *[][]int) {

     // ...

          tmp := *arrRes[level-1]

     // ...

     *arrRes = append(*arrRes, arr)
     build(n, level+1, arrRes)
一片是(基本上)三件事:长度、容量和指向底层数组的指针。Go中的所有内容都是按值传递的,因此当您向函数传递一个片时,您传递的是它的当前长度、当前容量和指针的内存地址。对函数内的长度和容量所做的更改是对副本的更改,不会影响长度h和在函数调用中作为参数传递的切片的容量

打印切片不会打印其基础数组,它会打印切片中可见的基础数组部分(如果len=0,则可能没有),基于(1)指向基础数组中假定切片可见的第一个元素的指针;(2)切片变量中的长度

如果要在函数内部修改切片的长度或容量,并且希望这些更改在函数外部可见,则可以返回切片以更新函数外部的上下文,如append所做的:

numbers := append(numbers, 27)
或者,您可以传入指向切片的指针:

func ChangeNumbersLenOrCap(numbers *[]int) {
    // make your changes, no return value required
}
对于您的程序,似乎可以使用指向int切片的指针:

var arrRes *[][]int
var arrRes *[]*[]int
…因为您没有跨另一个函数边界修改int切片。某些程序需要指向int切片指针切片的指针:

var arrRes *[][]int
var arrRes *[]*[]int
以下是一些简单的编辑,以帮助您开始:

    arrRes := [][]int{}
    gen(5, &arrRes)
    fmt.Println(arrRes) 
}

func gen(numRows int, arrRes *[][]int) { 

// ...

func build(n int, level int, arrRes *[][]int) {

     // ...

          tmp := *arrRes[level-1]

     // ...

     *arrRes = append(*arrRes, arr)
     build(n, level+1, arrRes)