首页 > 其他 > 详细

递归,回溯,剪枝

时间:2021-09-21 06:50:13      阅读:8      评论:0      收藏:0      [点我收藏+]

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

递归,回溯,剪枝

原文:https://www.cnblogs.com/9527s/p/15310150.html

(0)
(0)
   
举报
评论 一句话评论(0
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!