#include<stdio.h> void main() {double g(int m); int n; printf(" 请输入盘片数n: "); scanf("%d",&n); if(n<=40) printf(" %d盘的移动次数为:%.0f ",n,g(n)); else printf(" %d盘的移动次数为:%.4e ",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(" "); } 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(" input n: "); scanf("%d",&n); hn(n,'A','B','C'); printf(" k=%d ",k); // 输出移动次数 }