recursion - Recursive function to create number combinations in golang -


i'm trying figure out recursive function thing. have non-recursive demo works uses static methods not recursive. functions prints out combinations of "number sets" "pool_size". if could, please me make function recursive great.

package main  import (     "fmt" )  func combos_of1(pool_size int) {     := 1; < pool_size+1; i++ {         fmt.println(i)     }     fmt.println("\n") }  func combos_of2(pool_size int) {     := 1; < pool_size+1; i++ {         j := + 1; j < pool_size+1; j++ {             fmt.println(i, j)         }     }     fmt.println("\n") }  func combos_of3(pool_size int) {     := 1; < pool_size+1; i++ {         j := + 1; j < pool_size+1; j++ {             k := j + 1; k < pool_size+1; k++ {                 fmt.println(i, j, k)             }         }     }     fmt.println("\n") }  func main() {     combos_of1(10)     combos_of2(10)     combos_of3(10) } 

for example,

package main  import "fmt"  func rcombinations(p int, n []int, c []int, ccc [][][]int) [][][]int {     if len(n) == 0 || p <= 0 {         return ccc     }     if len(ccc) == 0 {         ccc = make([][][]int, p)     }     p--     := 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 = rcombinations(p, n[i+1:], cc, ccc)     }     return ccc }  func combinations(p int, n []int) [][][]int {     return rcombinations(p, n, nil, nil) }  func main() {     pools := 3     numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}     fmt.println(pools, "pools", "for", "numbers", numbers)     fmt.println()     nc := 0     c := combinations(pools, numbers)     fmt.println("pools:")     d := " digit : "     := range c {         fmt.println(i+1, d)         d = " digits: "         j := range c[i] {             nc++             fmt.println(c[i][j], " ")         }     }     fmt.println()     fmt.println(nc, "combinations") } 

output:

3 pools numbers [1 2 3 4 5 6 7 8 9 10]  pools: 1  digit :  [1]   [2]   [3]   [4]   [5]   [6]   [7]   [8]   [9]   [10]   2  digits:  [1 2]   [1 3]   [1 4]   [1 5]   [1 6]   [1 7]   [1 8]   [1 9]   [1 10]   [2 3]   [2 4]   [2 5]   [2 6]   [2 7]   [2 8]   [2 9]   [2 10]   [3 4]   [3 5]   [3 6]   [3 7]   [3 8]   [3 9]   [3 10]   [4 5]   [4 6]   [4 7]   [4 8]   [4 9]   [4 10]   [5 6]   [5 7]   [5 8]   [5 9]   [5 10]   [6 7]   [6 8]   [6 9]   [6 10]   [7 8]   [7 9]   [7 10]   [8 9]   [8 10]   [9 10]   3  digits:  [1 2 3]   [1 2 4]   [1 2 5]   [1 2 6]   [1 2 7]   [1 2 8]   [1 2 9]   [1 2 10]   [1 3 4]   [1 3 5]   [1 3 6]   [1 3 7]   [1 3 8]   [1 3 9]   [1 3 10]   [1 4 5]   [1 4 6]   [1 4 7]   [1 4 8]   [1 4 9]   [1 4 10]   [1 5 6]   [1 5 7]   [1 5 8]   [1 5 9]   [1 5 10]   [1 6 7]   [1 6 8]   [1 6 9]   [1 6 10]   [1 7 8]   [1 7 9]   [1 7 10]   [1 8 9]   [1 8 10]   [1 9 10]   [2 3 4]   [2 3 5]   [2 3 6]   [2 3 7]   [2 3 8]   [2 3 9]   [2 3 10]   [2 4 5]   [2 4 6]   [2 4 7]   [2 4 8]   [2 4 9]   [2 4 10]   [2 5 6]   [2 5 7]   [2 5 8]   [2 5 9]   [2 5 10]   [2 6 7]   [2 6 8]   [2 6 9]   [2 6 10]   [2 7 8]   [2 7 9]   [2 7 10]   [2 8 9]   [2 8 10]   [2 9 10]   [3 4 5]   [3 4 6]   [3 4 7]   [3 4 8]   [3 4 9]   [3 4 10]   [3 5 6]   [3 5 7]   [3 5 8]   [3 5 9]   [3 5 10]   [3 6 7]   [3 6 8]   [3 6 9]   [3 6 10]   [3 7 8]   [3 7 9]   [3 7 10]   [3 8 9]   [3 8 10]   [3 9 10]   [4 5 6]   [4 5 7]   [4 5 8]   [4 5 9]   [4 5 10]   [4 6 7]   [4 6 8]   [4 6 9]   [4 6 10]   [4 7 8]   [4 7 9]   [4 7 10]   [4 8 9]   [4 8 10]   [4 9 10]   [5 6 7]   [5 6 8]   [5 6 9]   [5 6 10]   [5 7 8]   [5 7 9]   [5 7 10]   [5 8 9]   [5 8 10]   [5 9 10]   [6 7 8]   [6 7 9]   [6 7 10]   [6 8 9]   [6 8 10]   [6 9 10]   [7 8 9]   [7 8 10]   [7 9 10]   [8 9 10]    175 combinations 

the variation single pool is:

package main  import "fmt"  func rpool(p int, n []int, c []int, cc [][]int) [][]int {     if len(n) == 0 || p <= 0 {         return cc     }     p--     := range n {         r := make([]int, len(c)+1)         copy(r, c)         r[len(r)-1] = n[i]         if p == 0 {             cc = append(cc, r)         }         cc = rpool(p, n[i+1:], r, cc)     }     return cc }  func pool(p int, n []int) [][]int {     return rpool(p, n, nil, nil) }  func main() {     pool := 9     numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}     p := pool(pool, numbers)     fmt.println(pool, "digit pool", "for", "numbers", numbers)     := range p {         fmt.println(p[i])     } } 

output:

9 digit pool numbers [1 2 3 4 5 6 7 8 9 10] [1 2 3 4 5 6 7 8 9] [1 2 3 4 5 6 7 8 10] [1 2 3 4 5 6 7 9 10] [1 2 3 4 5 6 8 9 10] [1 2 3 4 5 7 8 9 10] [1 2 3 4 6 7 8 9 10] [1 2 3 5 6 7 8 9 10] [1 2 4 5 6 7 8 9 10] [1 3 4 5 6 7 8 9 10] [2 3 4 5 6 7 8 9 10] 

Comments

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

java - No use of nillable="0" in SOAP Webservice -

ubuntu - Laravel 5.2 quickstart guide gives Not Found Error -