总代码
#include <stdio.h>
/**
* Hanoi.
*/
void hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) {
if (paraN <= 0) {
return;
} else {
hanoi(paraN-1, paraSource, paraTransit, paraDestination);//将 n - 1个盘从S 通过D 移动到 T
printf("%c->%c\n", paraSource, paraDestination);//将 最下面一个盘 移动到D
hanoi(paraN-1, paraTransit, paraDestination, paraSource);//将在T 上的n-1个盘,通过S移动到D上,目的完成。
}//Of if
}//Of hanoi
/**
* Test the hanoi function.
*/
void hanoiTest() {
printf("---- hanoiTest begins. ----\n");
printf("3 plates\n");
hanoi(3, 'A', 'B', 'C');//将三个盘子从A柱子上移动到B(其中借助了C);
printf("5 plates\n");
hanoi(5, 'A', 'B', 'C');
printf("---- hanoiTest ends. ----\n");
}
int main(void) {
hanoiTest();
return 0;
}
汉诺塔问题就是典型的递归,在离散数学也学了,最终得出规律就是f(n)=2*f(n-1)+1。
知道了具体过程总结规律就很简单。