递归,回溯,剪枝

对递归的理解很浅,经常困在底层递归中,有推荐看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)
    }
}

递归,回溯,剪枝

上一篇:Vue之兄弟组件之间数据交互


下一篇:封装的使用细节