用递归实现的汉诺塔问题,悄悄告诉你,汉诺塔问题是智商的分界线。
一、老师的代码#includevoid hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) { if (paraN <= 0) { return; } else { hanoi(paraN - 1, paraSource, paraTransit, paraDestination); printf("%c -> %c rn", paraSource, paraDestination); hanoi(paraN - 1, paraTransit, paraDestination, paraSource); }// Of if }// Of hanoi void hanoiTest() { printf("---- addToTest begins. ----rn"); printf("2 platesrn"); hanoi(2, 'A', 'B', 'C'); printf("3 platesrn"); hanoi(3, 'A', 'B', 'C'); printf("---- addToTest ends. ----rn"); }// Of addToTest int main() { hanoiTest(); return 0; }// Of main
运行结果:
---- addToTest begins. ---- 2 plates A -> C A -> B C -> B 3 plates A -> B A -> C B -> C A -> B C -> A C -> B A -> B ---- addToTest ends. ----二、还得看我的代码
#includevoid hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) { if (paraN <= 0) { return; }else { hanoi(paraN - 1, paraSource, paraTransit, paraDestination); printf("%c -> %c rn", paraSource, paraDestination); hanoi(paraN - 1, paraTransit, paraDestination, paraSource); }// of if }// of hanoi //核心代码段 //以下为Hanoi函数的测试用例 void hanoiTest() { printf("---- hanoiTest begins. ----rn"); printf("2 platesrn"); hanoi(2, 'A', 'B', 'C'); printf("3 platesrn"); hanoi(3, 'A', 'B', 'C'); printf("5 platesrn"); hanoi(5, 'A', 'B', 'C'); printf("---- hanoiTest ends. ----rn"); }// of hanoiTest int main() { hanoiTest(); return 0; }
运行结果:
---- hanoiTest begins. ---- 2 plates A -> C A -> B C -> B 3 plates A -> B A -> C B -> C A -> B C -> A C -> B A -> B 5 plates A -> B A -> C B -> C A -> B C -> A C -> B A -> B A -> C B -> C B -> A C -> A B -> C A -> B A -> C B -> C A -> B C -> A C -> B A -> B C -> A B -> C B -> A C -> A C -> B A -> B A -> C B -> C A -> B C -> A C -> B A -> B ---- hanoiTest ends. ----



