這個(gè)例子寫的太多了,到處都是,不過作為自己的筆記還是貼出來,如果大家的數(shù)據(jù)結(jié)構(gòu)教材上的代碼調(diào)試不通的話,這個(gè)代碼還是有點(diǎn)作用的^_^, 另外個(gè)人覺得這個(gè)例子也確實(shí)是遞歸的經(jīng)典用途,下面的代碼參考了<<c程序設(shè)計(jì)的抽象思維>>

/********************************************************************
    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柱子開始,移動(dòng)到finish柱子
* Precondition:        void
* Description:        如果只有一個(gè)盤子,直接從開始得那根柱子移動(dòng)到結(jié)束得柱子就可以了
* 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個(gè)disk從start移動(dòng)到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;
}


運(yùn)行結(jié)果如下:

hanio.bmp