這個例子寫的太多了,到處都是,不過作為自己的筆記還是貼出來,如果大家的數據結構教材上的代碼調試不通的話,這個代碼還是有點作用的^_^, 另外個人覺得這個例子也確實是遞歸的經典用途

,下面的代碼參考了<<c程序設計的抽象思維>>

/**//********************************************************************
created: 2005/12/24
created: 24:12:2005 10:42
filename: hanoi.c
author: Liu Qi
purpose: hanoi problem
*********************************************************************/


#include <stdio.h>
#include <assert.h>



#define COUNT 3




/**//*===========================================================================
* Function name: MoveSingleDisk
* Parameter: start:從start柱子開始,移動到finish柱子
* Precondition: void
* Description: 如果只有一個盤子,直接從開始得那根柱子移動到結束得柱子就可以了
* Return value: void
* Author: Liu Qi, [12/24/2005]
===========================================================================*/
void MoveSingleDisk(char start, char finish)


{
printf("%c -> %c\n", start, finish);
}




/**//*===========================================================================
* Function name: MoveTower
* Parameter: count:number of disks, start:開始的那根柱子
* Precondition: count > 0
* Description: 將count個disk從start移動到finish,借助temp
* Return value: void
* Author: Liu Qi, [12/24/2005]
===========================================================================*/
void MoveTower(int count, char start, char finish, char temp)


{
assert( count > 0 );

if (count == 1)

{
MoveSingleDisk(start, finish);
}
else

{
MoveTower(count - 1, start, temp, finish);
MoveSingleDisk(start, finish);
MoveTower(count - 1, temp, finish, start);
}
}


int main(int argc, char *argv[])


{
MoveTower(COUNT, 'A', 'B', 'C');
return 0;
}運行結果如下:
