1. 程式人生 > 實用技巧 >N重迴圈 go實現

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]
類似地,如果輸入是`vardims=[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]