В Python я могу сделать рекурсию, такую как:
def dfs(a, path):
if len(a) == 0:
print(path)
return
for i in range(len(a)):
dfs(a[:i]+a[i+1:], path+str(a[i]))
if __name__ == "__main__":
a = [10, 2]
dfs(a, "")
Она выдаст:
102
210
Однако, если я сделаю аналогичную вещь в Go,
package main
import "fmt"
func dfs(ns []int, path string) {
if len(ns) == 0 {
fmt.Println(path)
return
}
for i, v := range ns {
nx := append(ns[:i], ns[i+1:]...)
dfs(nx, fmt.Sprintf("%v%v", path, v))
}
}
func main() {
nums := []int{10, 2}
dfs(nums, "")
}
Вывод будет:
102
22
Полагаю, такое поведение вызвано срезом, ссылающимся на массив подчеркивания на Go, но я не понимаю, как, и как это отладить.
Не могли бы вы указать мне проблему?