首先你得知道原理:N个汉诺塔问题可以转换成:1 先把N-1个塔从A搬到B.2 把最下面的盘搬到C3 把N-1个盘从B搬到C上面的程序就是利用这个原理:假若有4个盘子:hanoi( 4, 'A', 'B', 'C' )会执行:4不等于1,所以执行else =>hanoi( 4- 1, 'A', 'C', 'B' ); .....1 move( 'A','C' ); .....2hanoi( 4 - 1, 'B','A', 'C' ); ......3在执行第1句时,调用递归:hanoi( 3, 'A', 'C', 'B' ); 这个又调用hanoi函数:3不等于1,所以执行else =>hanoi( 3- 1, 'A' ,'B','C' ); .....4 move( 'A','B'); .....5hanoi( 3 - 1, 'C','A', 'B' ); ......6在执行第4句时,调用递归:hanoi( 2, 'A' ,'B','C' );这个又调用hanoi函数:2不等于1,所以执行else =>hanoi( 2- 1, 'A','C','B'); .....7move( 'A','C'); .....8hanoi( 2 - 1, 'B','A','C'); ......9执行第7句时,调用递归:hanoi( 1, 'A','C','B');这个又调用hanoi函数:等于1,打印A-->B,此次调用完毕,转到第8句,打印A->C,再执行第9句:hanoi( 1, 'B','A','C');等于1,所以move(one,three),即B->C注意,这时候又回到了第5句(因为第4句包含的7,8,9全部执行完了):B-A依此类推...
每个月总有那么几天要上论坛好好学习学习。。