N重循环 go实现
1 package main 2 3 import "fmt" 4 5 //递归+回溯 6 func main() { 7 var nums = []int{2, 3} 8 res := []int{} 9 getNsum(nums, 0, res) 10 } 11 12 func getNsum(nums []int, index int, res []int) { 13 m := nums[index] 14 for i := 0; i < m; i++ { 15 res = append(res, i) 16 index++ 17 if index < len(nums) { 18 getNsum(nums, index, res) 19 } else { 20 fmt.Println(res) 21 } 22 res = res[:len(res)-1] 23 index-- 24 } 25 }
问题描述
实现 n 重循环的算法,n 是变量,且每重循环的循环次数也是变量。例如:
传入参数是 [1, 2],那么意味着外层循环数是 1,内层循环数数是 2。
如果传入参数是 [2, 2, 1],那么意味着最外层循环数是 2,次层循环数数是 2,最内层循环数是 1,依此类推。
要求打印出每一次循环的维度索引。
结果应该是:
[0, 0]
[0, 1]
[1, 0]
[1, 1]
类似地,如果输入是 `var dims = [2,2,2]`,那么结果是:
[ 0, 0, 0 ]
[ 0, 0, 1 ]
[ 0, 1, 0 ]
[ 0, 1, 1 ]
[ 1, 0, 0 ]
[ 1, 0, 1 ]
[ 1, 1, 0 ]
[ 1, 1, 1 ]
浙公网安备 33010602011771号