考考自己 递归应该怎么看?
2013-12-03 18:41
309 查看
void han(int num,char a,char b,char c)
{
if(num<=0)return ;
// step 1
han(num-1,a,c,b);//将除最下面一个的所有通过c转到b
// step 2
printf("%d:%c---------->%c\n",num,a,c);//a到c
// step 3
han(num-1,b,a,c);//将除最下面一个的所有通过a转到c,这个调用还有a、b交换的处理
}
han(n/*多少个盘子*/,'A','B','C');可以想象一下,按照常人的理解,在不多盘子的情况下 是可以手动写出来.
但是多了呢?很明显,不能这样做,那该如何理解上面的递归呢?
<1>递归处理的返回判定
<2>K = N - 1 时
<3>K = N 时
怎么样 有启发没?
反过来 即 假如当前把所有的盘子 除了最上面的没有移到指定位置,那么就是<1>,依此K = 2...N
本文出自 “BaggerSky” 博客,谢绝转载!
{
if(num<=0)return ;
// step 1
han(num-1,a,c,b);//将除最下面一个的所有通过c转到b
// step 2
printf("%d:%c---------->%c\n",num,a,c);//a到c
// step 3
han(num-1,b,a,c);//将除最下面一个的所有通过a转到c,这个调用还有a、b交换的处理
}
han(n/*多少个盘子*/,'A','B','C');可以想象一下,按照常人的理解,在不多盘子的情况下 是可以手动写出来.
但是多了呢?很明显,不能这样做,那该如何理解上面的递归呢?
<1>递归处理的返回判定
<2>K = N - 1 时
<3>K = N 时
怎么样 有启发没?
反过来 即 假如当前把所有的盘子 除了最上面的没有移到指定位置,那么就是<1>,依此K = 2...N
本文出自 “BaggerSky” 博客,谢绝转载!
相关文章推荐
- 一开始实现的时候,不知道贝塞尔曲线,自己去思考其他方法实现了。怎么想到用到贝塞尔曲线?以后碰到类似问题,应该先在网上找找都有什么方法实现。
- 不想让别人知道自己浏览过哪些网页和打开过哪些文件,应该怎么办?
- 自己想要做一个网站应该怎么做
- 面试的时候应该怎么介绍自己(1)
- 好的代码结构应该怎么去写?自己的思考,也请大家给点建议
- №男人应该知道自己应该怎么做
- 不愿让别人看见,只自己看的注释应该怎么写
- 即将换到一个自己不熟悉的部门做领导,应该怎么办
- №男人应该知道自己应该怎么做
- 即将换到一个自己不熟悉的部门做领导,应该怎么办
- poj 1416 Shredding Company (应该是用dfs吧,但是想了一下午不知道怎么递归来做,所以暴力做了)
- 当感觉自己写的代码表达不够清晰,有些bad smell时应该怎么做?
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- 飞机能否知道自己有没有被导弹锁定,可以的话是怎么做到的?_百度知道
- 前段框架,如jQuery的某些控件datepicker,我想自己进行重新初始化,怎么办?
- 国外电汇的参数应该怎么写?(来源csdn,魔法巧克力收集)
- 知乎:开复老师每天早上 4 点就起床,是怎么办到的?开复如何能很好地安排好自己的时间?
- 全力以赴去做好自己现在应该做好的事-11.22
- String.split()应该怎么用?