go 语言 for 循环多层嵌套怎么用递归函数实现?
大佬们好,go 语言 for 循环多层嵌套怎么用递归函数实现,小弟谷歌很久都不知道怎么实现。
func add(n int){
//n 嵌套次数,比如嵌套两次
for i:=0;i<len(s);i++{
for k:=0;k<len(s);k++{
...
}
}
}
比如上面 n 是 2 就嵌套两次,万一嵌套 n 次呢?请问大佬们,怎么实现参数 n 次,循环就嵌套 n 次,怎么用递归函数实现呢?小弟是新手,搞不懂,特意上来请教,感谢大家
func add(n int) { if n < 0 { return } if n == 0 { ... return } for i:=0; i<len(s); i++{ add(n-1) } }
感谢大佬指导,求和没有问题了。但是我原本的递归想法还是不知道如何实现,我贴一下原代码吧
package mainimport "fmt"var ( s = "abcdefghijklnmopqrstuvwxyz")func main() { var s1 []string for i := 0; i < len(s); i++ { for k := 0; k < len(s); k++ { for j := 0; j < len(s);j++ { s1 = append(s1,string(s[i])+string(s[k])+string(s[j]))) } } } fmt.Println(s1)}
相这种多重 for 循环嵌套,拼接字符串,不知道如何递归函数实现?写了好久都不知道如何实现,可能自己是新手吧,求大佬指点一下
首先这个多重 for 循环就很没有必要,只是为了挪一个 index 而已,如果要 10 个长度的字符串难道要写 10 层 for 循环😂如果你简化了这个 for 循环,参考 1L 的思路就可以写出来了func generateStrings(n int, prefix string) []string { if n == 0 { return []string{prefix} } var s1 []string for i := 0; i < len(s); i++ { s1 = append(s1, generateStrings(n-1, prefix+string(s[i]))...) } return s1}func main() { s1 := generateStrings(3, "") fmt.Println(s1)}
我平时确实这样写的。。。人比较笨,直到遇到好像要一直嵌套的或者嵌套不同数目的例子人就傻了。即便按照一楼大佬的方法,我也想不出怎么写。大佬的方案确实有用,换做我想破脑袋都想不出来。编程是我我的小小爱好,感谢大佬的指导,使我感觉编程更有乐趣了
想了好久,还是不清楚大佬 generateStrings(n-1, prefix+string(s[i]))... 这个怎么想出来的,太精妙了。想请问大佬,需要补充哪些知识才能有这种思维?
递归本来就是个难点,其实没有必要执着使用递归。另外你可以学一下 Erlang (或其他纯函数式编程语言),对理解递归有很大帮助。我也是对递归特别头疼,直到有一次看 Erlang 的入门教程,才感觉有点开窍。
其实该用递归还是不可避免的,一直对这个好像懂了又好像没懂。直到遇到昨天的问题才想着想把递归吃透。感谢大佬指点,看样子要花点时间看看其他函数式编程语言了
当时学 Erlang ,印象最深刻的就是,它想循环就只能用递归,没有其他实现循环的方法了,学不会递归根本没法用,因此它的教程也会特别深入浅出讲解递归。
说的我都想马上学起来了,哈哈
呃呃,想要深入了解的话建议看点数据结构与算法吧
这东西难吗?需要花的时间多少?其实我学编程只是当业余爱好来玩的。我补充知识单纯是想某门语言突破某个难点
比较枯燥,可以先翻翻看有哪些东西,扩宽一下思路也是不错的
感谢前辈指导
除非算法需要,不然能别递归就别递归了吧,,调用栈有最大层数限制的吧
m = len(s), 你的问题可以用 n 位 m 进制数来进行转换, 就变成了 1 层循环
LeetCode 中 DFS 、回溯相关的题目基本都是这样的,推荐两个网站学习:labuladong 的算法小抄 | labuladong 的算法小抄 labuladong.github.io/algo/youngyangyang04/leetcode-master: 《代码随想录》 LeetCode 刷题攻略 github.com/youngyangyang04/leetcode-master全排列问题和 OP 提出的问题比较类似,但是需要回溯,难度也不高,对于理解算法思想比较有帮助,可以先看一下: leetcode.cn/problems/permutations/
go 没有尾递归, 没事别写递归假设 n 是 3, 那么最里面的循环需要的是,0,0,0,00,0,0,2[0,0,1,1]....2,2,2,1你只需要模拟一个三进制的数,从 0-2222 的流程, 然后把每一位的数分别取出来, 就实现了上面的多重循环的功能.
推荐这本书 The Little Schemer
不是很懂
不知道如何实现,感觉是越来越复杂了...
看了一下,网站真的是好网站,感谢指导
看了一下,网站真的是好网站,感谢指导
看了一些国外一些大佬创业初期都是自己做了些小东西卖给大公司,然后作为起始金创业成功,为什么在国内很少出现这些人呢?还有国内公司如果看到一个人做的东西比较好,一般第一想到的是让自…
所以设计模式,实是是一种方法,一种为了解决某种或某类物定问题所使用的设计模型。据说,在编程语言方面有100多种设计模式,而在现实生活中,传说有上成千上万个模式,比如写书有写书的…
【本文曾于2007年3月于我在CSDN上的BLOG发布,现在我把其搬到酷壳来,一来是觉得这段历史相当传奇,值得大家再看看,二来也和我在酷壳上发布的一些文章相互链接。】 …