考考自己   递归应该怎么看?

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);//ac

   // step 3

   han(num-1,b,a,c);//将除最下面一个的所有通过a转到c,这个调用还有ab交换的处理

}

han(n/*多少个盘子*/,'A','B','C');

可以想象一下,按照常人的理解,在不多盘子的情况下  是可以手动写出来.

但是多了呢?很明显,不能这样做,那该如何理解上面的递归呢?

<1>递归处理的返回判定

<2>K = N - 1 时

<3>K = N 时

怎么样  有启发没?

反过来  即 假如当前把所有的盘子 除了最上面的没有移到指定位置,那么就是<1>,依此K = 2...N

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章