内容简介:学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔。算是算法的入门小题目之一吧~我这里直接拉来一个图解释一下(挂了请联系我)
学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔。算是算法的入门小题目之一吧~
视频教程
什么是汉诺塔?
我这里直接拉来一个图解释一下(挂了请联系我)
就是这么一个东西了,把所有的圆盘从左边移动到右边,并且大的圆盘不能够压住小的。怎么才能完成呢?
规则理解了,开始钻牛角尖
先来看看只有一个圆盘的情况,
嗯 相当的简单 A--->C 就可以了
两个的情况呢? 也不难 A--->B A--->C B--->C
三个的话有点挑战了 大家自己推一推
好的 十个呢?就算想了半天弄好了,怎么让程序帮我们做呢?头大!
牛角尖钻完了,冷静分析
在我们每次完成之前的状态,都是把最大的圆盘放到了最右边,剩下的圆盘放到了中间。
然后把中间的再都放到右边就好了
这道理就跟把大象装冰箱一样啊 都是三步呢!
这时候千万不要去想怎么把n-1层都搬到B柱 也不要想怎么把N-1层都搬到C柱,如果继续想下去你就会进入死循环,这时候你只需要做一个思维转换。
当我们把n-1层都搬到了中间柱的时候,只需要把最大的那个盘,从A搬到C柱就好了,剩下的怎么办呢?C柱永远是目标柱,我们不需要去移动它。这时候我们大点力!把B柱子掰下来!扔到A前面!无视掉C柱上面的大圆盘,因为我们不会再去动它了!是不是画面似曾相识?对啊!递归啊!继续把最左边的n-1层都弄到中间,最大的扔到C就好了啊!
看到这里如果你还在钻牛角尖的话,可以暂时休息一下了。
思维转换完成的过来写代码!
// JS写一下
function move(num,from,button,to){
// 如果只有一个圆盘
if(num==1){
console.log(from,"---->",to)
// 最左边的放到最后边完了个事!
return
}
// 如果柱子有点多咋办呢?
// 先把n-1个左边的放到中间呗
move(num-1,from,to,button) //放过去了,具体过程是啥?我特么哪里知道 它里面怎么操作?管他呢,反正他自己知道自己干了啥
console.log(from,"---->",to) // 我就干一件事,我就把左边最大的放到右边,虽然我不知道现在我是不是真正的左边,我可能是被你大力从中间拽过来的左边。
// 放完了然后呢?
// 把所有中间的柱子扔到最右边去
move(num-1,button,from,to)
}
move(3,"A","B","C") //测试一下
//golang
package main
import (
"fmt"
)
func main() {
move(3,"A","B","C")
}
func move(num int,from string,button string,to string){
if num==1 {
fmt.Printf("%s--->%s\n",from,to)
return
}
move(num-1,from,to,button)
fmt.Printf("%s--->%s\n",from,to)
move(num-1,button,from,to)
}
# python
def move(num ,fro,button,to)
if (num==1)
print(fro,'--->',to)
return
move(num-1,fro,to,button)
print(fro,'--->',to)
move(num-1,button,fro,to)
move(3,'A','B','C')
总结
递归这个东西,千万不可钻牛角尖,把大问题分成小问题,复杂问题简单化,如果非要把递归过程推出来的话,那谁都救不了你
欢迎大家关注我的博客,里面会有我所写博客的视频版本,如果你有更多疑问或者想学前端的话,可以加我微信shouzi_1994或者在博客下方品论留言,三大Q.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 人脸识别三大经典算法(附经典论文列表)
- 算法:经典排序算法的 Go 实现
- 详解十大经典机器学习算法——EM算法
- [经典算法]8皇后问题sql求解(回溯算法)
- 经典排序算法及其 Java 实现
- 目标函数的经典优化算法介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Approximation Algorithms
Vijay V. Vazirani / Springer / 2001-07-02 / USD 54.95
'This book covers the dominant theoretical approaches to the approximate solution of hard combinatorial optimization and enumeration problems. It contains elegant combinatorial theory, useful and inte......一起来看看 《Approximation Algorithms》 这本书的介绍吧!