void han(int num,char a,char b,char c)ide
{spa
if(num<=0)return ;递归
// step 1it
han(num-1,a,c,b);//将除最下面一个的全部经过c转到bclass
// step 2im
printf("%d:%c---------->%c\n",num,a,c);//a到cmargin
// step 3top
han(num-1,b,a,c);//将除最下面一个的全部经过a转到c,这个调用还有a、b交换的处理di
}view
han(n/*多少个盘子*/,'A','B','C');
能够想象一下,按照常人的理解,在很少盘子的状况下 是能够手动写出来.
可是多了呢?很明显,不能这样作,那该如何理解上面的递归呢?
<1>递归处理的返回断定
<2>K = N - 1 时
<3>K = N 时
怎么样 有启发没?
反过来 即 假如当前把全部的盘子 除了最上面的没有移到指定位置,那么就是<1>,依此K = 2...N