考考自己   遞歸應該怎麼看?

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

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