#include<stdio.h> void main() {double g(int m); int n; printf(" 請輸入盤片數n: "); scanf("%d",&n); if(n<=40) printf(" %d盤的移動次數為:%.0f\n",n,g(n)); else printf(" %d盤的移動次數為:%.4e\n",n,g(n)); } // 求移動次數的遞歸函數 double g(int m) { double s; if(m==1) // 確定初始條件 s=1; else s=2*g(m-1)+1; return s; } // 展示漢諾塔移動過程的遞歸設計,c432 #include <stdio.h> int k=0; void mv(char x,char y) // 輸出函數 { printf(" %c-->%c ",x,y); k++; // 統計移動次數 if(k%5==0) printf("\n"); } void hn(int m,char a,char b,char c) // 遞歸函數 { if(m==1) mv(a,c); else { hn(m-1,a,c,b); mv(a,c); hn(m-1,b,a,c); } } void main() // 主函數 { int n; printf("\n input n: "); scanf("%d",&n); hn(n,'A','B','C'); printf("\n k=%d \n",k); // 輸出移動次數 }