#include<stdio.h> #include<stdlib.h> //移动次数 int hanoi(int num) { static int all = 0; if (num == 1) { return 1; } else { all = hanoi(num - 1) * 2 + 1; } return all; } //移动步骤 void hanoi2(int num,char A,char B,char C) { if (num == 1) { printf("%c->%c ",A,C ); return 1; } else { hanoi2(num - 1,A,C,B); printf("%c->%c ", A, C); hanoi2(num - 1, B,A , C ); } } void main() { printf("请输入汉诺塔层数! "); int num; scanf_s("%d", &num); printf(" 移动次数=%d ",hanoi(num)); printf("移动方法如下 "); hanoi2(num,'A','B','C'); system("pause"); }
追求运行速度最好不用递归,追求代码简洁的话就用递归。
循环能实现的,递归也能实现;用递归能实现的,循环不一定能实现。
注意,在递归前执行的为顺序执行,在递归后执行的顺序为倒序。