对递归的理解很浅,经常困在底层递归中,有推荐看sicp前两章的
记录下题目,斐波那契就跳过了
- 递归函数像是一个黑盒,不要在脑子中思考每一步递归,只需要第一步和最后的return条件,其他中间过程是重复
汉诺塔
- 递归
func hanota(A []int, B []int, C []int) []int {
n:=len(A)
dfs(&A,&B,&C,n)
return C
}
//递归函数,a通过b向c移动n个数据
func dfs(a,b,c *[]int,n int){
if n==1{
*c = append(*c,(*a)[len(*a)-1])
*a = (*a)[:len(*a)-1] //截断不包含后面的一个
}
if n>1{
//n-1 通过c放b,1个底层放c,n-1通过a放c
dfs(a,c,b,n-1)
dfs(a,b,c,1)
dfs(b,a,c,n-1)
}
}