#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\n",A,C ); return 1; } else { hanoi2(num - 1,A,C,B); printf("%c->%c\n", A, C); hanoi2(num - 1, B,A , C ); } } void main() { printf("請輸入漢諾塔層數!\n"); int num; scanf_s("%d", &num); printf("\n移動次數=%d\n",hanoi(num)); printf("移動方法以下\n"); hanoi2(num,'A','B','C'); system("pause"); }
追求運行速度最好不用遞歸,追求代碼簡潔的話就用遞歸。spa
循環能實現的,遞歸也能實現;用遞歸能實現的,循環不必定能實現。code
注意,在遞歸前執行的爲順序執行,在遞歸後執行的順序爲倒序。blog