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