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

(我是 Go 的新手。)

我正在研究这个 leetcode 问题:https ://leetcode.com/problems/pascals-triangle/

package main

import "fmt"


func main() {

    arrRes := [][]int{}

    gen(5, arrRes)

    fmt.Println(arrRes) 

}


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

    build(numRows, 0, arrRes)

}


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

    if(n == level) {

        return 

    }


    arr := []int{}

    if level == 0 {

        arr = append(arr, 1)

    } else if level == 1 {

        arr = append(arr, 1, 1)

    } else {

        // get it out

        tmp := arrRes[level-1]

        arr = comb(tmp)

    }


    arrRes = append(arrRes, arr)

    build(n, level+1, arrRes)

}


func comb(arr []int) []int{

    // arr type init

    tmpArr := []int{1}

    for i:=1;  i<len(arr); i++ {

        sum := arr[i-1] + arr[i]

        tmpArr = append(tmpArr, sum)    

    }


    // go use val, not ref

    tmpArr = append(tmpArr, 1)

    return tmpArr;

}

我想定义一个累加变量arrRes := [][]int{}并继续传递给递归函数。我认为 Go 是按值传递而不是按引用传递。有没有办法保持这种模式?

我有两种替代方法:

  1. 传递一个全局变量。

  2. 将二维数组传递给func然后返回新的二维数组。

https://github.com/kenpeter/go_tri/blob/master/tri_global.go

https://github.com/kenpeter/go_tri/blob/master/tri.go


心有法竹
浏览 76回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go