前一阵子,一个同学问我“会写汉诺塔吗?”我寻思以前写过,大不了重写一遍,不难,但是当我写的时候却困难重重。全忘了一点都想不起来怎么写,于是,拿起纸和笔推导了一下递归的过程,然后把代码写出来,从这件事我体会到学习的过程中贵在于积累。
/* * main.c * * Created on: 2010-10-24 * Author: song */ #include <stdio.h> int totalstep = 0; void move(char A, char B, int id) { totalstep++; printf("Step %d,move %d disk from %c tower to %c tower\n", totalstep, id, A, B); } void hanoi(char A, char B, char C, int num) { if (num == 1) { move(A, C, 1); return; } hanoi(A, C, B, num-1); move(A, C, num); hanoi(B, A, C, num-1); } int main(int argc, char **argv) { int n; printf("Move disks from A tower to C tower, B tower as a temp.\n"); printf("Please input disks number:"); scanf("%d", &n); hanoi('A', 'B', 'C', n); return 0; }
Ok!